动态pl / sql调用返回非SQL类型

时间:2013-03-06 12:52:23

标签: sql oracle plsql boolean

我正在尝试动态调用PL / 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()?

提供此示例

非常感谢!

3 个答案:

答案 0 :(得分:2)

您可以使用Oracle函数SYS.DIUTIL.bool_to_intSYS.DIUTIL.int_to_bool

答案 1 :(得分:1)

您的功能很好,问题是Oracle不支持SQL中的boolean数据类型。如果你想要这个,你要么必须使用纯PL / SQL(如A.B.Cade的SQLfiddle),要么将布尔值转换为Y / N,1/0或类似。

您可以看到支持的数据类型here

答案 2 :(得分:-2)

这是等同的。尝试做什么:

SELECT * FROM dual WHERE 1=1; -- TRUE

SELECT * FROM dual WHERE 1=2; -- FALSE