Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以从另一个对象类型构造函数调用oracle对象类型构造函数吗?_Oracle_Plsql_Oracle12c - Fatal编程技术网

可以从另一个对象类型构造函数调用oracle对象类型构造函数吗?

可以从另一个对象类型构造函数调用oracle对象类型构造函数吗?,oracle,plsql,oracle12c,Oracle,Plsql,Oracle12c,如果我创建这样一个简单类型: 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 RESUL

如果我创建这样一个简单类型:

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;
在Java中,您应该始终使用正确的参数调用
ITEM\u REC
,而不是
New
super()


注意。您还应该知道Oracle使用对象类型(如表)进行操作。有关更多信息,请参阅Tom Kyte“Oracle数据库体系结构专家:Oracle数据库9i、10g和11g编程技术和解决方案”

您是否也使用大写锁定来编写Java代码?@William Robertson No。