[英]difference between select from dual and execute immediate oracle sql
select SUM(ABCD.COUNTRY_CODE) from AB_SRP_DETAILS_ALL ABCD
where rownum <= 1
当列COUNTRY_CODE是varchar2列时,INVALID为INVALID,但使用执行立即数触发时,相同的查询有效
使用更简单(但不合逻辑)的查询:
select sum(dummy) from dual;
Error report -
ORA-01722: invalid number
begin
execute immediate 'select sum(dummy) from dual';
end;
/
PL/SQL procedure successfully completed.
那么,为什么第一个语句会引发错误,而第二个语句却不会引发错误?
如文档中所述 :
如果dynamic_sql_statement是
SELECT
语句,并且您同时省略了into_clause和bulk_collect_into_clause ,则execute_immediate_statement永远不会执行。
在execute immediate
在我的PL / SQL块不具有into
条款,所以不执行查询,如不执行它,它不会产生异常。 查询语句仍然被解析 ,因此如果语法无效,则会看到错误; 但是ORA-01722是查询执行而不是解析期间抛出的运行时错误。
稍微逼真的PL / SQL版本会引发相同的错误:
declare
result number;
begin
execute immediate 'select sum(dummy) from dual' into result;
end;
/
Error report -
ORA-01722: invalid number
ORA-06512: at line 4
01722. 00000 - "invalid number"
*Cause: The specified number was invalid.
*Action: Specify a valid number.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.