2016-07-25 61 views
1

如果我創建一個簡單的類型是這樣的:是否有可能從另一個調用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號 –

回答

1

你應該這樣調用

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編程技巧和解決方案」

相關問題