是否有可能从另一个调用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。

+1

您是否还使用大写锁定编写Java代码? –

+0

@William Robertson号 –

你应该这样调用

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; 

代替Newsuper()在Java中,你必须拨打ITEM_REC用正确的参数。

注意。你也应该知道Oracle使用像表格这样的对象类型进行操作。欲了解更多信息,请参阅Tom Kyte“专家Oracle数据库架构:Oracle数据库9i,10g和11g编程技巧和解决方案”