可以从另一个对象类型构造函数调用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。