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: cannot drop or replace a type with type or table dependents,因为在 Curse 对象类型本身中使用了 Teacher 类型。

修改继承的对象类型(本例中为教师)时,我应该将 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 回答
0

使用 force 选项删除类型并执行您的代码。它会工作

DROP TYPE Teacher VALIDATE FORCE;

SQL> CREATE OR REPLACE TYPE Teacher UNDER SchoolMember (
       b number,
       CONSTRUCTOR FUNCTION Teacher RETURN SELF AS RESULT
    );

创建的类型。

于 2014-08-28T10:34:23.903 回答