如何创建一个集合并使用该集合在表中插入值?

时间:2019-06-02 10:42:07

标签: sql oracle plsql user-defined-types

嘿,我正在创建一个数据库来存储有关运动俱乐部的一些信息,我在那里有教练和运动员,但是当我尝试向表中插入教练(企业家)时,会出现错误:

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_curs类型的课程(t_cursos)的集合。

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。创建包含Entrenadors的表Entrenadors。

CREATE TABLE entrenadors of t_entrenador
  1. 将两个entrena插入餐桌上的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 个答案:

答案 0 :(得分:1)

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