【问题标题】:while executing plsql block returns query result when data present in the DB.When data is not found the query result returns nothing from exception在执行 plsql 块时,当数据库中存在数据时返回查询结果。当找不到数据时,查询结果不返回任何异常
【发布时间】:2020-09-09 04:54:03
【问题描述】:
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;

/

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

【问题讨论】:

    标签: sql oracle shell unix plsql


    【解决方案1】:

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

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

    【讨论】:

    • 所以我的代码应该是什么。 ?异常后我需要关闭循环吗?如果我这样做会引发错误?找不到数据时如何处理。
    • 您可以添加一个计数器来计算循环中找到的行数。循环结束后,您可以检查计数器是否等于 0,在这种情况下添加例如指令 raise no_data_found; 以在需要时创建异常。
    猜你喜欢
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    相关资源
    最近更新 更多