基本上,我想創建對記錄的引用,一個記錄類型是另一個的超類型。我對此感到困惑。在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
由於
UPDATE:
與@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
請幫忙,謝謝:)
「*這只是不起作用*」不是有效的Oracle錯誤消息。 –
@a_horse_with_no_name對不起,我的壞。我現在添加了錯誤消息。如果你看一看,我會很感激。謝謝 – dewijones92