簡體   English   中英

在PL / SQL中創建引用

[英]Create references in PL/SQL

基本上,我想創建對記錄的引用,一種記錄類型是另一種的超類型。 我對此有些困惑。

這是我的類型:

 CREATE OR REPLACE TYPE  module_t AS OBJECT (
     moduleCode# char(4),
     moduleName char(10)
) NOT FINAL;
/

CREATE OR REPLACE TYPE  specialised_module_t under module_t (
     someSpecialAttribute char(10)
);
/

CREATE OR REPLACE TYPE  course_t AS OBJECT (
     courseCode# char(4),
     module1 REF module_t,
     module2 REF specialised_module_t
);
/

這是我的桌子:

CREATE TABLE module_tab OF module_t(
    moduleCode# PRIMARY KEY NOT NULL
);

CREATE TABLE course_tab OF course_t(
    courseCode# PRIMARY KEY NOT NULL,
    scope for (module1) is module_tab,
    scope for (module2) is module_tab
);

我將記錄插入由標准模塊組成的模塊表中:

insert into module_tab values(
'm001', 'physics'
);

我將記錄插入由專用模塊組成的模塊表中:

insert into module_tab
    values( specialised_module_t(
    'm002',
    'physics',
    'special'
    )
);

這是棘手的一點:

我想在課程表中創建課程記錄。 在此記錄中, module1屬性需要引用模塊m001 (第一模塊記錄)和module2屬性需要引用模塊m002

我以為也許看起來像這樣:

INSERT into course_tab VALUES(
       'c001',
        SELECT REF(c) FROM module_tab c WHERE c.moduleCode# = 'm001',
        SELECT REF(c) FROM module_tab c WHERE c.moduleCode# = 'm002'
)

這只是行不通的:(

這是錯誤消息:

ERROR at line 3:
ORA-00936: missing expression

顯然我的語法是錯誤的,但是我不知道如何糾正它:/

我已經花了很長時間了,但我不知道:(
幫助將不勝感激:D
謝謝

更新:

在@a_horse_with_no_name的幫助下,我的新代碼是:

INSERT into course_tab VALUES(
       'c001',
        (SELECT REF(c) FROM module_tab c WHERE c.moduleCode# = 'm001'),
        (SELECT treat(REF(c) as ref specialised_module_t) FROM module_tab c WHERE treat(values(c) as moduleCode).person# = 'm002')
);

但是現在我得到了錯誤:

ERROR at line 4:
ORA-00936: missing expression

請幫助,謝謝:)

如果要使用SELECT語句在VALUES子句中插入標量值,則需要將SELECT語句放在括號之間:

INSERT into course_tab 
   (coursecode#, module1, module2)
VALUES 
   (
    'c001',
    (SELECT REF(c) FROM module_tab c WHERE c.moduleCode# = 'm001'),
    (SELECT REF(c) FROM module_tab c WHERE c.moduleCode# = 'm002')
   );

盡管當我嘗試使用您的示例(順便說一下,它還有很多其他語法錯誤)時,我還是收到了錯誤消息:

ORA-00932:數據類型不一致:預期的REF SPECIALISED_MODULE_T獲得了REF MODULE_T [SQL狀態= 42000,DB錯誤代碼= 932]

我真的不知道該怎么做(正如我說的那樣,我還沒有真正使用Oracle對象類型, course_tab的表定義對我來說是全新的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM