2

この質問を送信する前に、このテーマに関する Oracle ドキュメントを確認しました: Using CREATE OR REPLACE TYPE with Type and Table Dependencies

それでも私のエラーは解決されません。

いくつかのオブジェクト タイプを作成しました。

CREATE OR REPLACE TYPE SchoolMember AS OBJECT (
    ...
) NOT FINAL;
/

CREATE OR REPLACE TYPE Teacher UNDER SchoolMember (
   ...
);
/

CREATE OR REPLACE TYPE Curse AS OBJECT (
   ...
   refTeacher REF Teacher,
   ...
);
/

コンストラクターを追加して Teacher オブジェクト型を変更したいとします。

CREATE OR REPLACE TYPE Teacher UNDER SchoolMember (
   ...
   CONSTRUCTOR FUNCTION Teacher(...) RETURN SELF AS RESULT
);
/

CREATE OR REPLACE TYPE BODY Teacher AS
...
END;
/

ORA-02303が 表示されます。Teacher型が Curse オブジェクト型自体で使用されているため、型を型またはテーブル依存型で削除または置換できません。

継承されたオブジェクト タイプ (この場合は教師) を変更する場合、FORCE オプションはどこに配置すればよいですか? いくつかの方法を試しましたが、どれも機能しませんでした:

CREATE OR REPLACE TYPE Teacher FORCE UNDER SchoolMember

また

CREATE OR REPLACE TYPE Teacher UNDER SchoolMember FORCE

しかし、ORA-02303 エラーはまだ残っています。

4

2 に答える 2

3

問題を正確に再現できません。

元のオブジェクト

SQL> CREATE OR REPLACE TYPE SchoolMember AS OBJECT (a number) NOT FINAL;
  2  /

Type created.

SQL> CREATE OR REPLACE TYPE Teacher UNDER SchoolMember (b number);
  2  /

Type created.

SQL> CREATE OR REPLACE TYPE Curse AS OBJECT (refTeacher REF Teacher);
  2  /

Type created.

FORCE なしでの作成が失敗する

SQL> CREATE OR REPLACE TYPE Teacher UNDER SchoolMember (
  2     b number,
  3     CONSTRUCTOR FUNCTION Teacher RETURN SELF AS RESULT
  4  );
  5  /
CREATE OR REPLACE TYPE Teacher UNDER SchoolMember (
*
ERROR at line 1:
ORA-02303: cannot drop or replace a type with type or table dependents

FORCE作品でつくる

SQL> CREATE OR REPLACE TYPE Teacher FORCE UNDER SchoolMember (
  2     b number,
  3     CONSTRUCTOR FUNCTION Teacher RETURN SELF AS RESULT
  4  );
  5  /

Type created.

アップデート

FORCEオプションCREATE TYPEは 11gR2 で追加されました。この11gR2 の構文図では確認できますが、この11gR1 の図では確認できません。

あなたの場合、再作成する前にタイプを削除する必要があります。

SQL> DROP TYPE Teacher VALIDATE;

Type dropped.
于 2013-05-20T19:52:30.757 に答える