2016-07-25 3 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; 

Но это не работает. Это потому, что это невозможно вообще или потому, что я использую неправильный синтаксис? Я пробовал несколько (неудачных) синтаксисов уже ...

BTW, я использую Oracle 12C.

+1

Вы также пишете свой код Java с помощью блокировки колпачков? –

+0

@ Виллиам Робертсон №. –

ответ

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; 

Вместо New или super() в Java вы должны всегда вызывать ITEM_REC с правильными параметрами.

Примечание. Также вы должны знать, что Oracle манипулирует с типами объектов, такими как таблицы. Для получения дополнительной информации см. Tom Kyte «Экспертная база данных Oracle Database: Oracle Database 9i, 10g и 11g Методы и решения для программирования»

Смежные вопросы