使用执行立即参数和可选参数在 PL/SQL 中创建对象实例
Posted
技术标签:
【中文标题】使用执行立即参数和可选参数在 PL/SQL 中创建对象实例【英文标题】:Create an object instance in PL/SQL using execute immediate and optional arguments 【发布时间】:2012-06-11 14:15:07 【问题描述】:我有一个这样定义的对象:
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'
是否有可能做我想做的事?
实际代码中的FTR v_field 应该是动态定义的。
【问题讨论】:
【参考方案1】:只需替换 using 子句中参数的顺序即可:
execute immediate v_plsql_block using out v_my_obj, in v_some_value;
【讨论】:
以上是关于使用执行立即参数和可选参数在 PL/SQL 中创建对象实例的主要内容,如果未能解决你的问题,请参考以下文章
Oracle PL/SQL 版本 12.2.0.1.0 与 12.1.0.2.0 - 使用参数立即执行