执行 plsql 块时,当数据库中存在数据时返回查询结果.如果未找到数据,查询结果将不返回任何异常


if [ $returncode -eq 0 ]
then
query_msg=`$ISQL -S $USERNAME/$PASSWD@$SERVICENAME <<EOJ
set serveroutput on;
set heading off;
set feedback off;
set linesize 150;
declare
out_value varchar2(32767);
BEGIN
for c in (SELECT MESSAGE into out_value FROM RED.ERROR_LOG 
WHERE PROC = 'colour' 
AND to_char(to_date(DT,'DD-MON-YY')) = to_char(to_date(sysdate,'DD-MON-YY')))
loop
out_value :=c.MESSAGE;
dbms_output.put_line(out_value);
end loop;
EXCEPTION WHEN NO_DATA_FOUND THEN
dbms_output.put_line('Nothing found');
END;
/

当找不到数据时,异常块不会返回"未找到"语句。 有人可以纠正我哪里出错了。

异常NO_DATA_FOUND不会在游标循环结束时引发:当到达数据末尾时,代码只是退出循环而不引发任何异常。即使 SELECT 语句不返回任何行,也是如此。

通常,当运行不返回任何行的 SELECT 语句时会引发NO_DATA_FOUND,但如果 SELECT 是游标循环 SELECT 语句,则不会引发。

最新更新