PL / SQL - 没有数据发现错误处理程序 [英] PL/SQL - WHEN NO DATA FOUND ERROR HANDLER

查看:80
本文介绍了PL / SQL - 没有数据发现错误处理程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何修复下面的代码,以便我不会在返回的行的末尾找到 ERROR OTHERS ORA-01403:找不到数据?它不应该在那里如果我要退回记录吗?



Stanwood Consulting 6099 15-DEC-95 $ 22.50

Stanwood Consulting 6099 15 -DEC-95 $ 7.50

ERROR OTHERS ORA-01403:未找到数据



How can I fix the code below so that I won''t get ERROR OTHERS ORA-01403: no data found at the end of the returned rows? It shouldn''t be there If I am returning records?

Stanwood Consulting 6099 15-DEC-95 $22.50
Stanwood Consulting 6099 15-DEC-95 $7.50
ERROR OTHERS ORA-01403: no data found

SET SERVEROUTPUT ON
    DECLARE
        vcustid        CUSTOMERS.custid%type;
        vCname         CUSTOMERS.cname%type;
        vcustid_2      ORDERS.custid%type;
        vOrderid       ORDERS.orderid%type;
        vSalesDate     ORDERS.salesdate%type;
        vTotalValue    varchar2(100); 
        vNR_OF_ORDERS  pls_integer;
    
   CURSOR  Customers_cur

   IS
  
     SELECT C.custid,C.cname,O.orderid,O.salesdate,
           to_char((SUM(NVL(OI.qty, 0) * NVL(I.price, 0))), '$99,999.99') AS vTotalValue, 
           COUNT(O.orderid) NR_OF_ORDERS--COUNT(OI.orderid) NR_OF_ORDERS
     FROM CUSTOMERS C
           LEFT OUTER JOIN ORDERS O
            ON O.custid = C.custid
            
            LEFT OUTER JOIN ORDERITEMS OI
            ON O.orderid = OI.orderid
            
            LEFT OUTER JOIN INVENTORY I
            ON OI.partid = I.partid    
                             
   WHERE C.custid = &custid    
   GROUP BY C.custid,C.cname,O.orderid,O.salesdate,OI.qty,I.price
   ORDER BY vTotalValue DESC; 
 
   Customer_Check   Customers_cur%ROWTYPE;
   BEGIN
   
    OPEN Customers_cur;
   --to show column names.
      DBMS_OUTPUT.PUT_LINE('---------------------------------------------------------------');
      DBMS_OUTPUT.PUT_LINE('CustomerName           OrderId     SaleDdate         TotalValue'); 
      DBMS_OUTPUT.PUT_LINE('---------------------------------------------------------------');
   LOOP

     FETCH Customers_cur  INTO vCustid,vCname,vOrderid,vSalesDate,vTotalValue,vNR_OF_ORDERS;
     
     IF Customers_cur%NOTFOUND
     THEN
     RAISE NO_DATA_FOUND;
     END IF;
     
      DBMS_OUTPUT.put_line( (vCname) 
                       || '  '  || (vOrderid) 
                       || '  '  || (vSalesDate)
                       || '  '  || (vTotalValue ));
    
     IF vNR_OF_ORDERS = 0
     THEN
      DBMS_OUTPUT.PUT_LINE(  'custid :' 
                        || '  '  || vcustid
                        || '  '  ||  ' has no orders');                
    
    END IF; 

    END LOOP;  
 
     CLOSE Customers_cur;

  EXCEPTION                    
    WHEN NO_DATA_FOUND
    THEN
    DBMS_OUTPUT.put_line('ERROR OTHERS  ' || SQLERRM);              
    WHEN OTHERS
    THEN
       DBMS_OUTPUT.put_line('ERROR OTHERS  ' || SQLERRM);
  END;

推荐答案

22.50

Stanwood Consulting 6099 15-DEC-95
22.50
Stanwood Consulting 6099 15-DEC-95


7.50

ERROR OTHERS ORA-01403:未找到数据



7.50
ERROR OTHERS ORA-01403: no data found

SET SERVEROUTPUT ON
    DECLARE
        vcustid        CUSTOMERS.custid%type;
        vCname         CUSTOMERS.cname%type;
        vcustid_2      ORDERS.custid%type;
        vOrderid       ORDERS.orderid%type;
        vSalesDate     ORDERS.salesdate%type;
        vTotalValue    varchar2(100); 
        vNR_OF_ORDERS  pls_integer;
    
   CURSOR  Customers_cur

   IS
  
     SELECT C.custid,C.cname,O.orderid,O.salesdate,
           to_char((SUM(NVL(OI.qty, 0) * NVL(I.price, 0))), '


99,999.99') AS vTotalValue,
COUNT(O.orderid)NR_OF_ORDERS - COUNT(OI.orderid)NR_OF_ORDERS
FROM CUSTOMERS C
LEFT OUTER JOIN ORDERS O
ON O.custid = C.custid

L. EFT OUTER JOIN ORDERITEMS OI
ON O.orderid = OI.orderid

LEFT OUTER JOIN INVENTORY I
ON OI.partid = I.partid

WHERE C.custid =& custid
GROUP BY C.custid,C.cname,O.orderid,O.salesdate,OI.qty,I.price
ORDER BY vTotalValue DESC ;

Customer_Check Customers_cur%ROWTYPE;
BEGIN

OPEN Customers_cur;
- 显示列名。
DBMS_OUTPUT.PUT_LINE(' ---------------------------- -----------------------------------');
DBMS_OUTPUT.PUT_LINE(' CustomerName OrderId SaleDdate TotalValue');
DBMS_OUTPUT.PUT_LINE(' ----------------- ----------------------------------------------');
LOOP

FETCH Customers_cur INTO vCustid,vCname,vOrderid, vSalesDate,vTotalValue,vNR_OF_ORDERS;

IF Customers_cur%NOTFOUND
那么
RAISE NO_DATA_FOUND;
END IF ;


DBMS_OUTPUT.put_line ((vCname)
|| ' ' ||(vOrderid)
| | ' ' ||(vSalesDate)
|| ' ' ||(vTotalValue));

IF vNR_OF_ORDERS = 0
那么
DBMS_OUTPUT.PUT_LINE(' custid:'
|| ' ' || vcustid
|| ' ' || ' 没有订单');

END IF ;

END LOOP;

关闭 Customers_cur;

EXCEPTION
WHEN NO_DATA_FOUND
那么
DBMS_OUTPUT.put_line(' ERROR OTHERS' || SQLERRM);

WHEN 其他
那么
DBMS_OUTPUT.put_line (' ERROR OTHERS' || SQLERRM);
END ;
99,999.99') AS vTotalValue, COUNT(O.orderid) NR_OF_ORDERS--COUNT(OI.orderid) NR_OF_ORDERS FROM CUSTOMERS C LEFT OUTER JOIN ORDERS O ON O.custid = C.custid LEFT OUTER JOIN ORDERITEMS OI ON O.orderid = OI.orderid LEFT OUTER JOIN INVENTORY I ON OI.partid = I.partid WHERE C.custid = &custid GROUP BY C.custid,C.cname,O.orderid,O.salesdate,OI.qty,I.price ORDER BY vTotalValue DESC; Customer_Check Customers_cur%ROWTYPE; BEGIN OPEN Customers_cur; --to show column names. DBMS_OUTPUT.PUT_LINE('---------------------------------------------------------------'); DBMS_OUTPUT.PUT_LINE('CustomerName OrderId SaleDdate TotalValue'); DBMS_OUTPUT.PUT_LINE('---------------------------------------------------------------'); LOOP FETCH Customers_cur INTO vCustid,vCname,vOrderid,vSalesDate,vTotalValue,vNR_OF_ORDERS; IF Customers_cur%NOTFOUND THEN RAISE NO_DATA_FOUND; END IF; DBMS_OUTPUT.put_line( (vCname) || ' ' || (vOrderid) || ' ' || (vSalesDate) || ' ' || (vTotalValue )); IF vNR_OF_ORDERS = 0 THEN DBMS_OUTPUT.PUT_LINE( 'custid :' || ' ' || vcustid || ' ' || ' has no orders'); END IF; END LOOP; CLOSE Customers_cur; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.put_line('ERROR OTHERS ' || SQLERRM); WHEN OTHERS THEN DBMS_OUTPUT.put_line('ERROR OTHERS ' || SQLERRM); END;


这篇关于PL / SQL - 没有数据发现错误处理程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆