Oracle SQL3嵌套表插入问题

Oracle SQL3嵌套表插入问题,sql,oracle,Sql,Oracle,我正在制作一个SQL3脚本,在其中创建类型,然后创建表和嵌套表。 当我想插入一行时,我得到的prolem会显示: ORA-00932:不一致的数据类型:应为UDT got CHAR 这是已创建类型和表的问题的在线再现,您可以尝试插入: 下面是类型创建脚本 CREATE TYPE T_Personne ; / CREATE TYPE T_SET_Tag AS TABLE OF Varchar2(30); / CREATE TYPE T_Message AS OBJECT ( Text

我正在制作一个SQL3脚本,在其中创建类型,然后创建表和嵌套表。 当我想插入一行时,我得到的prolem会显示:

ORA-00932:不一致的数据类型:应为UDT got CHAR

这是已创建类型和表的问题的在线再现,您可以尝试插入:

下面是类型创建脚本

CREATE TYPE T_Personne ;
/

CREATE TYPE T_SET_Tag AS TABLE OF Varchar2(30);
/

CREATE TYPE T_Message AS OBJECT (
    Texte Varchar2(500),
    DateEcrit Date,
    Tags T_SET_Tag
);
/

CREATE TYPE T_SET_Message AS TABLE OF T_Message;
/

CREATE TYPE T_Contact AS OBJECT(
    Per REF T_Personne,
    Depuis Date
);
/

CREATE TYPE T_SET_Contact AS TABLE OF T_Contact;
/

CREATE OR REPLACE TYPE T_Personne AS OBJECT (
    Prenom Varchar2(30),
    Suit T_SET_Contact,
    Ecrit T_SET_Message
);
/
CREATE TABLE TAB_Personne OF T_Personne
    NESTED TABLE Suit STORE AS TAB_suit,
    NESTED TABLE Ecrit STORE AS TAB_ecrit(
        NESTED TABLE Tags STORE AS TAB_Tags
    );
这是表创建脚本

CREATE TYPE T_Personne ;
/

CREATE TYPE T_SET_Tag AS TABLE OF Varchar2(30);
/

CREATE TYPE T_Message AS OBJECT (
    Texte Varchar2(500),
    DateEcrit Date,
    Tags T_SET_Tag
);
/

CREATE TYPE T_SET_Message AS TABLE OF T_Message;
/

CREATE TYPE T_Contact AS OBJECT(
    Per REF T_Personne,
    Depuis Date
);
/

CREATE TYPE T_SET_Contact AS TABLE OF T_Contact;
/

CREATE OR REPLACE TYPE T_Personne AS OBJECT (
    Prenom Varchar2(30),
    Suit T_SET_Contact,
    Ecrit T_SET_Message
);
/
CREATE TABLE TAB_Personne OF T_Personne
    NESTED TABLE Suit STORE AS TAB_suit,
    NESTED TABLE Ecrit STORE AS TAB_ecrit(
        NESTED TABLE Tags STORE AS TAB_Tags
    );
最后是我用来插入新行的脚本

INSERT INTO TAB_Personne VALUES( 
    'Baam',
    T_SET_Contact(),
    T_SET_Message()
);

INSERT INTO TAB_Personne VALUES( 
    'Rachel',
    T_SET_Contact(
        (SELECT REF(P)
        FROM TAB_Personne P
        WHERE P.Prenom='Baam'), 
        to_date('01/01/2018', 'dd/mm/yyyy')
    ),
    T_SET_Message(
        'Paris candidat aux jeux Olympiques 2022',
        to_date('01/06/2019', 'dd/mm/yyyy'),
        T_SET_Tag('JM2022')
    )
);

我收到的错误消息是

创建了1行

  'Paris candidat aux jeux Olympiques 2022',      *
第10行出错:

ORA-00932:不一致的数据类型:应为UDT got CHAR


如果有人能指导我,我会很高兴的,谢谢。

您正在指定一个
T\u SET\u Message
集合,但是您需要
T\u Message
对象;您提供的是该对象类型的属性,而不是该类型的实际对象。(非)集合中的第一个元素是字符串,因此会出现错误-您提供了一个字符串(
'Paris…'
),而它希望看到UDT(
T_消息('Paris…,…)

您也在使用
T\u SET\u Contact
集合执行相同的操作

您需要将当前属性包装在对象构造函数中;所以这是可行的:

INSERT INTO TAB_Personne VALUES( 
    'Rachel',
    T_SET_Contact(
        T_Contact(
            (SELECT REF(P)
            FROM TAB_Personne P
            WHERE P.Prenom='Baam'), 
            to_date('01/01/2018', 'dd/mm/yyyy')
        )
    ),
    T_SET_Message(
        T_Message(
            'Paris candidat aux jeux Olympiques 2022',
            to_date('01/06/2019', 'dd/mm/yyyy'),
            T_SET_Tag('JM2022')
        )
    )
);