1

次のように定義されたオブジェクトがあります。

create or replace type MYOBJ as object (
    field1 varchar2(100);
    field2 varchar2(100);
    field3 varchar2(100);
);

そして、このような関数(コンストラクターを使用できることはわかっています):

create or replace function new_myobj ( field1 varchar2 default null
                                     , field2 varchar2 default null
                                     , field3 varchar2 default null) 
                                       return myobj is
v_obj MYOBJ;
begin
    v_obj := myobj(field1, field2, field3);
    return v_obj;
end new_obj;

このようなオブジェクトタイプのインスタンスを作成しようとしています

declare
   v_plsql_block varchar2(200);
   v_my_obj MYOBJ;
   v_field varchar2(200);
   v_some_value varchar2(200) := 3;
begin 
    v_field := 'field1'
    v_plsql_block := 'begin :a := new_myobj('||v_field||' => :b); end;';
    execute immediate v_plsql_block using in v_some_value, out v_my_obj;
end;

しかし、私はエラーが発生します: PLS-00306: wrong number or types of arguments in call to 'NEW_MYOBJ'

私がやろうとしていることをすることさえ可能ですか?

実際のコード v_field の FTR は動的に定義する必要があります。

4

1 に答える 1

4

using 句のパラメーターの順序を置き換えるだけです。

execute immediate v_plsql_block using out v_my_obj, in v_some_value;
于 2012-06-11T14:38:11.397 に答える