基本的に、レコードへの参照を作成したいのですが、一方のレコード タイプは他方のレコード タイプのスーパータイプです。私はそれについて少し混乱しています。
ここに私のタイプがあります:
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
助けてください、ありがとう:)