这是对是否可以在 PL/SQL 中使用对象组合的后续问题?
该问题解决了如何在 PL/SQL 中创建相互依赖的对象类型(即每个对象的一个属性是对另一个对象的引用)。
我遇到的下一个问题与对象构造函数有关。这是代码(从逻辑上讲,学生存在于人体内)。此外,只是为了在评论中排除这一点,使用继承不是我的选择。
人物对象
CREATE OR REPLACE TYPE PERSON FORCE AUTHID DEFINER UNDER MYSCHEMA.BASE_OBJECT (
student MYSCHEMA.student,
additional attributes...
CONSTRUCTOR FUNCTION PERSON
RETURN SELF AS RESULT
) NOT FINAL;
CREATE OR REPLACE TYPE BODY PERSON
AS
CONSTRUCTOR FUNCTION PERSON
RETURN SELF AS RESULT IS
BEGIN
self.student := NEW MYSCHEMA.STUDENT(self);
RETURN;
END;
END;
学生对象
CREATE OR REPLACE TYPE STUDENT FORCE AUTHID DEFINER UNDER MYSCHEMA.BASE_OBJECT (
person REF MYSCHEMA.PERSON,
CONSTRUCTOR FUNCTION STUDENT(p_person REF MYSCHEMA.PERSON)
RETURN SELF AS RESULT
) NOT FINAL;
CREATE OR REPLACE TYPE BODY STUDENT
AS
CONSTRUCTOR FUNCTION STUDENT(p_person REF MYSCHEMA.PERSON)
RETURN SELF AS RESULT IS
BEGIN
self.person := p_person;
RETURN;
END;
END;
除了在 PERSON 构造函数中实例化 PERSON 中的 STUDENT 对象的以下行之外,此代码将编译而不会出现任何错误:
self.student := NEW MYSCHEMA.STUDENT(self);
这会引发以下错误:
Error(22,29): PLS-00306: wrong number or types of arguments in call to 'STUDENT'
所以,亲爱的朋友们,我再次寻求你们的帮助。我猜测有一个附加参数被隐式传递给 STUDENT 构造函数,但这只是一个猜测。
谢谢。