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

标签 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 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;

您应该始终使用正确的参数调用 ITEM_REC,而不是 Java 中的 Newsuper()

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

关于oracle - 是否可以从另一个调用 oracle 对象类型构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38569135/

相关文章:

sql - 从 12.1 更新到 Oracle 12.2 后 Table Operator 出现错误 (ORA-21700)

java - Oracle 中是否不推荐使用 RAW 类型?

sql-server - 跨异构数据库复制

oracle - 将 ORACLE FORM 6I 迁移到 12C

sql - 根据另一列对一列进行计数

sql - 如何循环PL/SQL的:=a+2;

sql - 使用来自另一个具有重复项的表中的数据更新 oracle 中的表

sql - 为什么no_data_found ORA-01403是Oracle中的异常?

oracle - 为什么我在输出中得到游标语句?

Oracle,从 SQL-Plus 文件 x.sql 中调用 PL/SQL 问题说 my_function "may not be a function"