Plsql 为什么可以';我是否将布尔数据类型与立即执行一起使用?

Plsql 为什么可以';我是否将布尔数据类型与立即执行一起使用?,plsql,oracle11g,boolean,execute-immediate,Plsql,Oracle11g,Boolean,Execute Immediate,注释第10行抛出错误,而注释第9行运行良好。为什么?根据错误“表达式必须是SQL类型”,AFAIK PL/SQL支持布尔数据类型。那么,这里有什么问题 根据: 这特别适用于动态PL/SQL(以及SQL): 在运行时,绑定参数将替换动态字符串中相应的占位符。每个占位符必须与USING子句和/或RETURNING INTO子句中的bind参数相关联。可以使用数字、字符和字符串文字作为绑定参数,但不能使用布尔文字(TRUE、FALSE和NULL)。要将空值传递给动态字符串,必须使用变通方法。请参阅“将

注释第10行抛出错误,而注释第9行运行良好。为什么?根据错误“表达式必须是SQL类型”,AFAIK PL/SQL支持布尔数据类型。那么,这里有什么问题

根据:

这特别适用于动态PL/SQL(以及SQL):

在运行时,绑定参数将替换动态字符串中相应的占位符。每个占位符必须与USING子句和/或RETURNING INTO子句中的bind参数相关联。可以使用数字、字符和字符串文字作为绑定参数,但不能使用布尔文字(TRUE、FALSE和NULL)。要将空值传递给动态字符串,必须使用变通方法。请参阅“将空值传递给动态SQL”

这不适用于动态PL/SQL(仅适用于SQL),但为了完整性,请继续:

动态SQL支持所有SQL数据类型。例如,定义变量和绑定参数可以是集合、LOB、对象类型的实例和引用。动态SQL不支持PL/SQL特定类型。例如,定义变量和绑定参数不能是布尔值或表索引。唯一的例外是PL/SQL记录可以出现在INTO子句中


您使用的是什么版本的Oracle?我相信这将是版本相关的行为。根本的问题是,
boolean
不是一种SQL数据类型,它只是一种PL/SQL数据类型<代码>--第9行将抛出
PLS-00457:表达式必须是SQL类型
,但
--第10行
的工作方式与预期一致。我认为错误文本很好地解释了这个问题。你为什么不提这个问题?我就是这么说的。。。当我注释掉
第9行时,它工作正常,但当我注释
第10行时,它抛出错误。我的问题是否解释了其他内容:S?哦,对不起,我解释了
注释第10行抛出错误
意思是当注释第10行时,抛出错误。(我不是以英语为母语的人。)
DECLARE dyn_stmt VARCHAR2(200);
b1 boolean;
FUNCTION f(x INTEGER) RETURN boolean AS
BEGIN
RETURN FALSE;
END f;
BEGIN
dyn_stmt := 'BEGIN :b := f(5); END;';
EXECUTE IMMEDIATE dyn_stmt USING OUT b1; --line 9
b1:=f(5);   --line 10
END;