コンストラクターのオーバーロードを使用して、独自の型を作成しました。
CREATE TYPE foo_type AS OBJECT(
foo_type INTEGER,
foo_number NUMBER(28, 28),
foo_varchar2 VARCHAR2(4000 CHAR),
CONSTRUCTOR FUNCTION foo_type (data NUMBER) RETURN SELF AS RESULT,
CONSTRUCTOR FUNCTION foo_type (data VARCHAR2) RETURN SELF AS RESULT
)
CREATE TYPE BODY foo_type AS
CONSTRUCTOR FUNCTION foo_type (data NUMBER) RETURN SELF AS RESULT
IS
BEGIN
foo_type := 1;
foo_number := data;
return;
END;
CONSTRUCTOR FUNCTION foo (data VARCHAR2) RETURN SELF AS RESULT
IS
BEGIN
foo_type := 2;
foo_varchar2 := data;
return;
END;
END;
それが機能している限り、私は過負荷ではありませんでしたが:
insert into test_table (field) values ( foo_type(1, 2.2, 'bar') )
しかし、私がコンストラクターを書いたとき、それはまったく機能しません:
insert into test_table (field) values ( foo_type(2.2) )
また
insert into test_table (field) values ( foo_type('bar') )
この時点で、オラクルは次のように述べています。「ORA-06553:この呼び出しに一致する宣言'foo_type'が多すぎます」。
insert into test_table (field) values ( foo_type(foo_varchar2 => 'bar') )
「ORA-009007:右括弧がありません」と言います。
動作するように何を変更すればよいですか?
ありがとう。