Как создать коллекцию и вставить значения в таблицу с коллекцией? - PullRequest
1 голос
/ 02 июня 2019

Эй, я создаю базу данных для хранения некоторой информации о спортивном клубе, где у меня есть тренеры и спортсмены, но когда я пытаюсь вставить тренеров (энтренадоров) в таблицу, появляются ошибки:

enter image description here

Вот мой код:

  1. Создание типа человека (t_persona), который наследует типы тренера и спортсменов.Мы должны создать функцию, которая возвращает все данные

CREATE OR REPLACE type t_persona as object( nom VARCHAR2(20), cognom VARCHAR2(20), dataNaix DATE, MEMBER PROCEDURE mostrar ) NOT FINAL; / CREATE OR REPLACE type body t_persona AS MEMBER PROCEDURE mostrar IS BEGIN dbms_output.put_line('Nom: ' || nom || 'Cognom: ' || cognom || 'DataNaix: ' || dataNaix); END; END; /

2. Создание типа curs (t_curs).

CREATE OR REPLACE type t_curs as object( nom VARCHAR2(50), hores NUMBER(10), lloc VARCHAR2(50), dia DATE );

3.Создание коллекции курсов (t_cursos) типа t_curs.

CREATE OR REPLACE TYPE t_cursos AS varray(20) of t_curs;

4. Создание типа тренера (t_entrenandor), должно быть унаследовано от типаt_persona.У него должна быть функция, которая возвращает все данные, повторно используя функцию t_persona.

CREATE OR REPLACE type t_entrenador under t_persona(
   telefon VARCHAR2(9),
   cursos t_cursos,
OVERRIDING MEMBER PROCEDURE mostrar);
/

CREATE OR REPLACE type body t_entrenador as
OVERRIDING MEMBER PROCEDURE  mostrar is
 BEGIN
   (self as t_persona).mostrar;
    dbms_output.put_line('Telefon: ' || telefon || 'Cursos : ' || cursos);
  END;
END;

5.Создать энтэнадоры таблиц, которые содержат энтренадоры.

CREATE TABLE entrenadors of t_entrenador
Вставьте в таблицу entrenadors две энтрены

INSERT INTO entrenadors VALUES('Daniel', 'Rovira', to_date('12/01/2014','DD/MM/YYYY'), '65555222', t_cursos('spinning', 1, 'España', to_date('12/01/2014','DD/MM/YYYY')));

В этом номере 6 происходит ошибка, может кто-нибудь помочь мне найти ошибку?Спасибо!

1 Ответ

1 голос
/ 02 июня 2019

t_entrenador.cursos имеет тип данных t_cursos, который представляет собой таблицу t_curs.Чтобы создать экземпляр таблицы, вам нужно передать экземпляров t_curs.

INSERT INTO entrenadors 
VALUES('Daniel', 'Rovira', to_date('12/01/2014','DD/MM/YYYY'), '65555222',
        t_cursos(t_curs('spinning', 1, 'España', to_date('12/01/2014','DD/MM/YYYY'))
   )
  );
...