是否有可能从另一个调用oracle对象类型构造函数?
问题描述:
如果我创建一个简单的类型是这样的:是否有可能从另一个调用oracle对象类型构造函数?
CREATE OR REPLACE TYPE ITEM_REC AS OBJECT (
FIELD1 NUMBER(1)
, FIELD2 VARCHAR2(15 CHAR)
, FIELD3 NUMBER
, FIELD4 DATE
, CONSTRUCTOR FUNCTION ITEM_REC(
FIELD1 NUMBER
, FIELD2 VARCHAR2
) RETURN SELF AS RESULT
, CONSTRUCTOR FUNCTION ITEM_REC(
FIELD1 NUMBER
, FIELD2 VARCHAR2
, FIELD3 NUMBER
) RETURN SELF AS RESULT
);
/
然后我用构造函数如下,所有完美的作品:
CREATE OR REPLACE TYPE BODY ITEM_REC AS
CONSTRUCTOR FUNCTION ITEM_REC(
FIELD1 NUMBER
, FIELD2 VARCHAR2
) RETURN SELF AS RESULT IS
BEGIN
SELF.FIELD1 := FIELD1;
SELF.FIELD2 := FIELD2;
RETURN;
END;
CONSTRUCTOR FUNCTION ITEM_REC(
FIELD1 NUMBER
, FIELD2 VARCHAR2
, FIELD3 NUMBER
) RETURN SELF AS RESULT IS
BEGIN
SELF.FIELD1 := FIELD1;
SELF.FIELD2 := FIELD2;
SELF.FIELD3 := FIELD3;
RETURN;
END;
END;
/
然而,在第二构造,我想引用第一个构造函数,和我们在java中做的一样;它应该像
CONSTRUCTOR FUNCTION ITEM_REC(
FIELD1 NUMBER
, FIELD2 VARCHAR2
, FIELD3 NUMBER
) RETURN SELF AS RESULT IS
BEGIN
SELF(FIELD1, FIELD2);
SELF.FIELD3 := FIELD3;
RETURN;
END;
但这不起作用。这是因为它根本不可能或因为我使用错误的语法?我已经尝试了几种(不成功)的语法...
顺便说一句,我正在使用Oracle 12C。
答
你应该这样调用
create or replace TYPE BODY ITEM_REC AS
CONSTRUCTOR FUNCTION ITEM_REC(
FIELD1 NUMBER
, FIELD2 VARCHAR2
) RETURN SELF AS RESULT IS
BEGIN
SELF.FIELD1 := FIELD1;
SELF.FIELD2 := FIELD2;
RETURN;
END;
CONSTRUCTOR FUNCTION ITEM_REC(
FIELD1 NUMBER
, FIELD2 VARCHAR2
, FIELD3 NUMBER
) RETURN SELF AS RESULT IS
BEGIN
SELF := ITEM_REC(FIELD1, FIELD2);
SELF.FIELD3 := FIELD3;
RETURN;
END;
END;
代替New
或super()
在Java中,你必须拨打ITEM_REC
用正确的参数。
注意。你也应该知道Oracle使用像表格这样的对象类型进行操作。欲了解更多信息,请参阅Tom Kyte“专家Oracle数据库架构:Oracle数据库9i,10g和11g编程技巧和解决方案”
您是否还使用大写锁定编写Java代码? –
@William Robertson号 –