【发布时间】:2017-05-31 11:11:31
【问题描述】:
当我尝试运行此代码时,它没有显示任何输出,我不知道为什么。
此过程接受客户 ID 并显示所有订单 由指定客户制作。它使用游标来存储详细信息 订单,然后打印详细信息。
SET SERVEROUTPUT ON;
create or replace PROCEDURE procedure_CustOrderHistory (cust_id IN number) AS
CURSOR c_CustOrderHistory IS
Select o.order_id, o.order_totalCost, o.order_date, cu.customer_firstName,
cu.customer_lastName, s.staff_firstName, s.staff_lastName, os.order_status
FROM orders o, customer cu, staff s, order_status os
where o.customer_id=cu.customer_id AND s.staff_id = o.staff_id AND
os.order_statusID = o.order_statusID and cu.customer_id = cust_id ;
BEGIN
FOR r_order IN c_CustOrderHistory
LOOP
dbms_output.put_line('Order ID: '||r_order.order_id || ', Order Total Cost: ' || r_order.order_totalCost || 'BHD, Order Date: ' || r_order.order_date || ', Customer Name: ' || r_order.customer_firstName || ' ' || r_order.customer_lastName|| ', Customer Name: ' || r_order.customer_firstName || ' ' || r_order.customer_lastName || ', Order Status: '|| r_order.order_status);
END LOOP;
END;
这个匿名块测试前面的过程。它询问用户 获取一个 ID,然后通过传入客户 ID 调用该过程。
SET SERVEROUTPUT ON;
DECLARE
v_custid number := &customerid;
BEGIN
procedure_CustOrderHistory(v_custid);
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('Customer ID not found.');
WHEN OTHERS THEN
dbms_output.put_line('Error! ' || SQLERRM);
END;
【问题讨论】:
-
欢迎来到 Stack Overflow。请阅读How to Ask 并创建一个minimal reproducible example。我们只能说:如果您没有与 WHERE 子句对应的数据并且没有发生错误,则此查询将不打印任何内容。
-
你在哪里运行这个?例如。在 SQL*Plus 中,您需要在两组代码后使用正斜杠
-
正如 Tom Kyte 所说,这就像去找你的机械师说“我的车无法启动,我不知道为什么”......
-
我不是 Oracle 专家。但是在 SQL Server 中,如果我们连接 NULL 值,我们将不会得到结果。在这里,您连接了这么多列。检查它们中的任何一个是否返回 NULL ,因此您没有得到。 这只是我的猜测,不是分析结果