【问题标题】:Oracle - object-relational DB (Insert INTO subtype with Ref to another object)Oracle - 对象关系数据库(插入 INTO 子类型并引用另一个对象)
【发布时间】:2011-11-08 18:35:21
【问题描述】:

基本上,我有一个超类型(Person)和一个子类型(学生)。我必须在 person_objtab 中插入一个学生对象。一个人对象有一个地址表的 REF,当我尝试添加新学生时,它给了我“缺少表达式”错误。这是代码,非常感谢任何帮助!

create type address_objtyp as object (
    Line1 varchar2(30),
    Line2 varchar2(30),
    Line3 varchar2(30),
    Postcode varchar2(10),
    Country varchar2(20)
)
/

create type person_objtyp as object (
    NI varchar2 (20),
    Name varchar2(30),
    Address REF address_objtyp,
    Phone varchar2(30)
)
NOT FINAL
/

CREATE type student_objtyp UNDER person_objtyp (
    Dept_id varchar2(10),
    Course varchar2(10),
    StuYear number,
    Total_credits number
)
/

create table address_objtab of address_objtyp;
create table person_objtab of person_objtyp;

INSERT INTO address_objtab VALUES(
address_objtyp('9',  'Bell', 'Lancashire', ' BB52 4GF', 'the UK')
)
/

这是失败的语句:

INSERT INTO Person_objtab values 
 (student_objtyp 
     (SELECT  2222, 'Jo', REF(aa), '0161 0450 452', '10', 'Computing', '2', 220 
       FROM address_objtab aa
      WHERE aa.postcode = ' BB52 4GF')
)
/

【问题讨论】:

    标签: sql database oracle


    【解决方案1】:

    您正在混淆立即值和结果集插入的语法,并且对象构造函数需要在 select 子句中 - 尝试

    INSERT
      INTO Person_objtab (
               SELECT student_objtyp( 2222, 'Jo', REF(aa), '0161 0450 452', '10', 'Computing', '2', 220)
                 FROM address_objtab aa 
                WHERE aa.postcode = ' BB52 4GF'
           )
         ;
    

    相反。问候,卡斯滕

    【讨论】:

    • 它在我的测试设置中确实有效 - 但感谢您的提示,我会检查一下。
    【解决方案2】:
    INSERT INTO person_objtab 
    VALUES (student_typ(
            2222,
            'Jo',
            (SELECT REF(b) FROM address_objtab b WHERE line1 = '9 Bell'),
             '01200 233 233',
             10,
             'Computing',
             2,
             220
    ));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-18
      • 1970-01-01
      相关资源
      最近更新 更多