当我在PLSQL中运行以下代码时,我收到了“找不到数据”错误。
declare
v_firm_id number;
amount number;
begin
OPEN MT_CURSOR FOR
SELECT firm_id
FROM t_firm;
LOOP
FETCH MT_CURSOR INTO v_firm_id;
EXIT WHEN MT_CURSOR%NOTFOUND;
Select sum(TRN_AMOUNT) into amount
from t_sales
where FIRM_ID = v_firm_id;
update t_firm
set matching_amount = amount
where firm_id = v_firm_id;
END LOOP;
end;
此代码有什么问题吗?谁能让我知道纠正?谢谢!
答案 0 :(得分:1)
看来问题是光标返回的公司之一的表T_SALES中没有数据。要处理这个问题,您需要包含NO_DATA_FOUND的处理程序 例外,如果客户没有销售交易,则总销售额设置为零:
declare
v_firm_id number;
amount number;
begin
OPEN MT_CURSOR FOR
SELECT firm_id
FROM t_firm;
LOOP
FETCH MT_CURSOR INTO v_firm_id;
EXIT WHEN MT_CURSOR%NOTFOUND;
BEGIN
Select sum(TRN_AMOUNT) into amount
from t_sales
where FIRM_ID = v_firm_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
AMOUNT := 0;
END;
update t_firm
set matching_amount = amount
where firm_id = v_firm_id;
END LOOP;
end;
分享并享受。
答案 1 :(得分:0)
如果我单独运行,我可以从该查询获得总和(trn_amount)。一世 试图按以下方式打印金额:dbms_output.put_line('amount:' ||量);我得到的输出如下:(如果没有交易,则右转 销售它会显示0,但似乎是空的)金额:(BLANK)
我猜t_firm和t_sales之间没有基于firm_id的匹配。
一个小提示,用SQL语句替换它:
CREATE TABLE t_firm ( matching_amount NUMBER, firm_id NUMBER );
CREATE TABLE t_sales ( trn_amount NUMBER, firm_id NUMBER );
INSERT INTO t_firm VALUES (100, 1);
INSERT INTO t_sales VALUES (200, 1);
UPDATE t_firm f
SET f.matching_amount =
(
SELECT sum(s.trn_amount)
FROM t_sales s
WHERE f.firm_id = s.firm_id
)
;
SELECT matching_amount FROM t_firm WHERE firm_id = 1;
-- 200