【发布时间】:2020-11-22 17:44:54
【问题描述】:
是否可以在构造函数中将 table%rowtype 作为参数传递?
我有这样的东西,这很有效
CREATE OR REPLACE TYPE shape AS OBJECT (
name VARCHAR2(30),
area NUMBER,
CONSTRUCTOR FUNCTION shape(SELF IN OUT NOCOPY shape, name VARCHAR2)
RETURN SELF AS RESULT,
CONSTRUCTOR FUNCTION shape(SELF IN OUT NOCOPY shape, name VARCHAR2,
area NUMBER) RETURN SELF AS RESULT
) NOT FINAL;
/
CREATE OR REPLACE TYPE BODY shape AS
CONSTRUCTOR FUNCTION shape(SELF IN OUT NOCOPY shape, name VARCHAR2)
RETURN SELF AS RESULT IS
BEGIN
SELF.name := name;
SELF.area := 0;
RETURN;
END;
CONSTRUCTOR FUNCTION shape(SELF IN OUT NOCOPY shape, name VARCHAR2,
area NUMBER) RETURN SELF AS RESULT IS
BEGIN
SELF.name := name;
SELF.area := area;
RETURN;
END;
END;
/
但是我还需要传递一个 table%row 作为参数
CREATE OR REPLACE TYPE shape AS OBJECT (
name VARCHAR2(30),
area NUMBER,
CONSTRUCTOR FUNCTION shape(SELF IN OUT NOCOPY shape, name VARCHAR2)
RETURN SELF AS RESULT,
CONSTRUCTOR FUNCTION shape(SELF IN OUT NOCOPY shape, name VARCHAR2,
area NUMBER) RETURN SELF AS RESULT,
CONSTRUCTOR FUNCTION shape(SELF IN OUT NOCOPY shape, ctrl CONTROL%ROWTYPE) RETURN SELF AS RESULT
) NOT FINAL;
/
CREATE OR REPLACE TYPE BODY shape AS
CONSTRUCTOR FUNCTION shape(SELF IN OUT NOCOPY shape, name VARCHAR2)
RETURN SELF AS RESULT IS
BEGIN
SELF.name := name;
SELF.area := 0;
RETURN;
END;
CONSTRUCTOR FUNCTION shape(SELF IN OUT NOCOPY shape, name VARCHAR2,
area NUMBER) RETURN SELF AS RESULT IS
BEGIN
SELF.name := name;
SELF.area := area;
RETURN;
END;
CONSTRUCTOR FUNCTION shape(SELF IN OUT NOCOPY shape, ctrl CONTROL%ROWTYPE) RETURN SELF AS RESULT IS
BEGIN
SELF.area := NULL;
RETURN;
END;
END;
/
行/列错误
0/0 PL/SQL:编译单元分析终止 8/63 PLS-00329:模式级类型对 SCHEMA_A.CONTROL 的引用非法 错误:检查编译器日志
类型 Body SHAPE 编译
行/列错误
0/0 PL/SQL:编译单元分析终止 1/11 PLS-00905:对象 SCHEMA_A.SHAPE 无效 1/11 PLS-00304:没有规范就无法编译“SHAPE”的主体 错误:检查编译器日志
这样的事情可能吗?
【问题讨论】:
-
显然不是。我建议传入相关行的主键,然后在函数中获取所需的行。
标签: oracle plsql oracle-sqldeveloper