我想动态调用返回一个布尔值没有运气的PL/SQL方法。我一直在寻找答案,但似乎这是不可能的。动态pl/sql调用返回非SQL类型
这里是什么,我试图做一个很简单的例子:
create or replace
function test_ret_bool return boolean as
begin
return true;
end test_ret_bool;
,然后调用:
declare
ret_val boolean;
sql_stmt varchar2(1000);
begin
sql_stmt := 'select test_ret_bool() from dual';
execute immediate sql_stmt into ret_val;
end;
这不起作用,生成错误:
ORA-06553: PLS-382: expression is of wrong type
另外我试着改变sql_stmt为:
sql_stmt := 'begin :result := test_ret_bool(); end;';
execute immediate sql_stmt using out ret_val;
调用然后PL/SQL引擎,但它给出了这个错误:
PLS-00457: expressions have to be of SQL types
我见过的描述相同问题的其他线程,并可能使用的包装功能。在我的情况下,我不可能使用包装函数。
我已经看到了一些关于使用dbms_sql.execute()这个可能的想法,但还没有得到它的工作。
任何人都可以请指教?有人可以提供一个使用dbms_sql.execute()的例子吗?
非常感谢!
为什么你不能使用包装?这个工程 - http://www.sqlfiddle.com/#!4/e2a00/4 – 2013-03-06 13:01:14
哪个版本的oracle? – TechDo 2013-03-06 13:01:21
@ A.B.Cade这是一个可行的解决方案,请发布。 – TechDo 2013-03-06 13:08:20