有下面一个关系:create or replace TYPE Person_T AS OBJECT
(
  personID VARCHAR2(10),
  name VARCHAR2(20)) NOT FINAL
/
create or replace TYPE Client_T UNDER Person_T
(
  address VARCHAR2(50),
  email VARCHAR2(20))
/
create or replace TYPE Order_T AS OBJECT
(
  orderID VARCHAR2(10),
  client REF Client_T)
/CREATE TABLE Person OF Person_T
( personID NOT NULL,
  PRIMARY KEY (personID));CREATE TABLE OrderList OF Order_T
( orderID NOT NULL,
  PRIMARY KEY (orderID));
现在往Person表插入一条数据insert into Person values(Client_T('001','CSDN','Beijing, China','[email protected]'));
现在的问题是,如何用insert into语句往OrderList表插入一条数据?望请高人指点!我曾使用如下代码插入,错误提示为: SQL Error: ORA-00932: inconsistent datatypes: expected REF BI.CLIENT_T got REF BI.PERSON_Tinsert into OrderList values('order001',
                              (select ref(p) from person p where p.personID = '001'));

解决方案 »

  1.   

    insert into OrderList select 'order001',ref(p) from person p where p.personID = '001';
      

  2.   

    insert into OrderList select 'order001',ref(p) from person p where p.personID = '001';
    这句代码不行啊,oracle 11g还是报错,错误报告如下:Error starting at line 1 in command:
    insert into OrderList select 'order001',ref(p) from person p where p.personID = '001'
    Error at Command Line:1 Column:44
    Error report:
    SQL Error: ORA-00932: inconsistent datatypes: expected REF SYSTEM.CLIENT_T got REF SYSTEM.PERSON_T
    00932. 00000 -  "inconsistent datatypes: expected %s got %s"
      

  3.   

    ref(p)这个不是一个存储过程吗?
      

  4.   

    你看一下这个吧
    http://topic.csdn.net/u/20070907/17/f25e8f24-c0e8-44ac-8a3b-68d5822bf305.html
      

  5.   

    试试这个对吗,我这个不太熟,照猫画虎写的
    insert into OrderList select 'order001',p.* from person p where p.personID = '001';
      

  6.   

    数据类型不一致,OrderList 的引用的那个Client_T类型这个是一共有4个字段。person_t里面实际包含2个字段。所以报错。

    CREATE TABLE Person OF Person_T
    ( personID NOT NULL,
      PRIMARY KEY (personID));
    改为
    CREATE TABLE Person OF Client_T
    ( personID NOT NULL,
      PRIMARY KEY (personID));
    就可以了。。