Как правильно ВСТАВИТЬ в VARRAY ТИПА ОБЪЕКТА? - PullRequest
0 голосов
/ 01 декабря 2018

В данный момент я работаю в SQL Developer и проверяю создание различных ТИПОВ.На данный момент это идея:

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)));

После выполнения команды INSERT компилятор покажет это в консоли:

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

Кто-то может помочь и подсказать, как правильно вставить INSERT в этом случае.

1 Ответ

0 голосов
/ 01 декабря 2018

Создайте элементы вашего varray как actividad_t объекты.

Следующие работы для меня:

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)));
...