oracle - 是否可以在 PL/SQL 中使用对象组合?

标签 oracle plsql object-composition

我试图弄清楚如何使用 pl/sql 对象类型实现对象组合。这是我的 super 简单的例子。

CREATE OR REPLACE TYPE PERSON FORCE AUTHID DEFINER UNDER MYSCHEMA.BASE_OBJECT (
    student                 ND_COMMON_ADMIN.STUDENT
) NOT FINAL;

CREATE OR REPLACE TYPE STUDENT FORCE AUTHID DEFINER UNDER MYSCHEMA.BASE_OBJECT (
    person                  ND_COMMON_ADMIN.PERSON,
    application_checklist   ND_COMMON_ADMIN.APPLICATION_CHECKLIST
) NOT FINAL;

您可以看到该人(所有者对象)包含学生对象。您还可以看到学生包含一个人员对象(否则,学生将无法访问人员的数据......对吗?)

但是,PL/SQL 不喜欢这些对象相互引用并引发以下错误:

Error: ORA-04055: Aborted: "PERSON" formed a non-REF mutually-dependent cycle with "STUDENT".

因此,如果有人能给我建议,告诉我如何通过作文让学生成为人的一部分,同时让学生能够分辨出它是哪个人对象的一部分,我将不胜感激。

谢谢。

最佳答案

根据 ORA-04055 的文档和以下 URL,您不能在两种对象类型中拥有相互依赖的对象的实际实例。其中至少有一个必须作为引用。

注意:我将 PERSON 的定义放在第一位,因为逻辑上 STUDENT 似乎是 PERSON 的依赖项。但是,如果情况并非如此,则可以交换声明顺序。

此外,包含另一个对象的实际实例的对象必须首先完全定义。

这将编译,如果两个对象都具有其他对象的 REF 类型,它将编译,但反之则不会。

CREATE OR REPLACE TYPE STUDENTC;

CREATE OR REPLACE TYPE PERSONC   AS OBJECT (
    student1  REF STUDENTC
) NOT FINAL;
/
CREATE OR REPLACE TYPE STUDENTC   AS OBJECT  (
    person1   PERSONC,
    application_checklist   INTEGER
) NOT FINAL;
/


引用文献:

http://psoug.org/definition/REF.htm

http://docs.oracle.com/cd/A87860_01/doc/appdev.817/a76976/adobjmng.htm

http://docs.oracle.com/cd/E11882_01/appdev.112/e11822/adobjmng.htm#i1003083

请参阅 ORA-04055 的 ORACLE 文档

关于oracle - 是否可以在 PL/SQL 中使用对象组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14322711/

相关文章:

sql - Oracle PL/SQL : How to DEREF from a VARRAY of REFs?

python - 如何使python类支持项目分配?

oracle - 第 4 行错误 : PL/SQL: SQL Statement ignored

sql - 如何自动显示匿名PL/SQL block 内所有SQL语句的输出

java - NUMBER 的精度和小数位数是否会影响 ResultSet.getObject() 的行为

oracle - PLS-00103 : Encountered the symbol “ON” when expecting one of the following

c++ - 是否可以在运行时确定对象选择的情况下使用 C++ 对象组合?

c++ - C++为我的新对象包装子对象数组的正确方法?

oracle - 需要使用legacy PLSQL with DBLink call,在XA事务中,不能使用共享连接

SQL 查询 - 可能需要分析函数