sqloracle-databasesql-insertuser-defined-typesvarray

How to INSERT correctly in a VARRAY of TYPE OBJECT?


In this moment I'm working in SQL Developer and proving creation of different TYPES. For now this is the idea:

CREATE OR REPLACE TYPE actividad_t AS OBJECT(
    nombre varchar2(50),
    contenido varchar2(50),
    plantilla varchar2(50),
    nota float); 

CREATE OR REPLACE TYPE vActividad_t AS VARRAY(5) OF actividad_t;

CREATE OR REPLACE TYPE asig_pers_act_t AS OBJECT(
    dni varchar2(50),
    id_asig int,
    actividades vActividad_t,
    MEMBER FUNCTION calc_media RETURN FLOAT,
    MEMBER PROCEDURE mostrar_datos (SELF IN OUT NOCOPY asig_pers_act_t));

CREATE TABLE Asig_Pers_Act OF asig_pers_act_t;

INSERT INTO Asig_Pers_Act(dni, id_asig, actividades) VALUES
('11223344A', 3, vActividad_t(
  ('Actividad1', 'Contenido1', 'Plantilla1', 7),
  ('Actividad2', 'Contenido2', 'Plantilla2', 8.5),
  ('Actividad3', 'Contenido3', 'Plantilla3', 5),
  ('Actividad4', 'Contenido4', 'Plantilla4', 6.5),
  ('Actividad5', 'Contenido5', 'Plantilla5', 9)));

After execute the INSERT command the compiler show this in console:

Informe de error -
Error SQL: ORA-00907: falta el paréntesis derecho
00907. 00000 -  "missing right parenthesis"
*Cause:    
*Action:

Someone can help and tell me how to INSERT correctly in this case?


Solution

  • Create the elements of your varray as actividad_t objects.

    The following works for me:

    INSERT INTO Asig_Pers_Act(dni, id_asig, actividades) VALUES
    ('11223344A', 3, vActividad_t(
      actividad_t('Actividad1', 'Contenido1', 'Plantilla1', 7),
      actividad_t('Actividad2', 'Contenido2', 'Plantilla2', 8.5),
      actividad_t('Actividad3', 'Contenido3', 'Plantilla3', 5),
      actividad_t('Actividad4', 'Contenido4', 'Plantilla4', 6.5),
      actividad_t('Actividad5', 'Contenido5', 'Plantilla5', 9)));