【发布时间】:2020-05-13 11:12:06
【问题描述】:
我有两个表 customers 和 orders 如下:
客户:
+----+------+------------+
| ID | Name | Contact_no |
+----+------+------------+
| 1 | Matt | 9435112340 |
| 2 | John | 6654342312 |
| 3 | Jill | 6654342312 |
+----+------+------------+
订单:
+----------+------------+----------+------+
| Order_id | Order_date | Quantity | C_id |
+----------+------------+----------+------+
| 1011 | 09-jan-18 | 30 | 1 |
| 1012 | 09-feb-18 | 300 | 1 |
| 1013 | 09-feb-18 | 200 | 3 |
| 1111 | 09-feb-18 | 100 | 1 |
| 1016 | 09-feb-18 | 20 | 2 |
+----------+------------+----------+------+
我正在编写一个PL/SQL 程序,其中列出了订单数量大于 200 的人的id、name 和contact_no。我能够实现这一点。但如果不存在记录,那么我想打印一条消息“未找到记录”。我知道如果没有记录,那么oracle 会抛出no_data_found 异常。因此,我已经根据它编写了我的程序。但是,虽然没有记录,oracle 没有抛出异常,我的 Exception 块没有执行,也没有打印输出。任何人都可以请帮助出了什么问题,我怎样才能达到所需的结果?以下是我的程序。
DECLARE
CURSOR cust_cur IS
SELECT * FROM customers WHERE customers.id IN (SELECT c_id FROM orders WHERE orders.quantity>300 group by c_id);
BEGIN
FOR cust IN cust_cur LOOP
dbms_output.put_line('Customer_id Customer_Name Customer_Phone');
dbms_output.put_line(cust.id||' '||cust.name||' '||cust.contact_no);
END LOOP;
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('No data found');
WHEN OTHERS THEN
dbms_output.put_line('Error Due To -->'|| SQLCODE||SQLERRM);
END;
我已将SQL语句中数量的条件从200改为300,因为它不会返回任何行。
【问题讨论】: