2011-11-08 15 views
1

基本的に、スーパータイプ(Person)とサブタイプ(Student)があります。 person_objtabに生徒オブジェクトを挿入する必要があります。 personオブジェクトにREF to Addressテーブルがあり、新しい学生を追加しようとしているときに 'missing expression'エラーが表示されます。ここにコードは、どんな助けも高く評価されています!Oracle - オブジェクト・リレーショナルDB(別のオブジェクトへの参照を含むINTOサブタイプの挿入)

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

答えて

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

をあなたが即値の構文を混合し、設定の挿入を引き起こし、オブジェクトコンストラクタは、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' 
     ) 
    ; 

代わりに。カスステンについては、

+0

これはうまくいきません。 – tomsky

+0

テストセットアップで動作しましたが、ヒントのおかげでチェックします。 – collapsar

関連する問題