【发布时间】:2015-04-28 04:44:17
【问题描述】:
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;
评论第 10 行会引发错误,而评论第 9 行工作正常。为什么 ?根据错误“表达式必须是 SQL 类型”并且 AFAIK PL/SQL 支持布尔数据类型。那么,这里有什么问题呢?
【问题讨论】:
-
您使用的是什么版本的 Oracle?我相信这将是版本相关的行为。根本问题是
boolean不是 SQL 数据类型,它只是 PL/SQL 数据类型。 -
我用的是 11g,也更新了标签。
-
我认为你混淆了线条;
--line 9将抛出PLS-00457: expressions have to be of SQL types但--line 10按预期工作。我认为错误文本几乎可以解释问题。为什么你没有把它从问题中排除? -
这就是我所说的......当我注释掉
line 9时它工作正常,但是当我注释line 10时它会抛出错误。我的问题是否解释了其他内容:S? -
哦,对不起,我解释了
commenting line 10 throws error的意思,当一个注释掉第 10 行时,就会抛出一个错误。 (我的母语不是英语。)
标签: plsql oracle11g boolean execute-immediate