IF :CUSTOMER_ID IS NOT NULL AND :BRANCH_ID IS NOT NULL THEN
DECLARE
X_NO NUMBER;
X_VOUCHER_ID NUMBER;
BEGIN
SELECT
GL_VOUCHER_ID
INTO X_VOUCHER_ID
FROM
SM_SALES_INVOICES SI,
AR_CUSTOMERS AC,
GL_VOUCHERS GV
WHERE
AC.CUSTOMER_ID = SI.CUSTOMER_ID
AND SI.GL_VOUCHER_ID = GV.VOUCHER_ID
AND SI.CUSTOMER_ID = :CUSTOMER_ID;
UPDATE GL_VOUCHERS
SET
BRANCH_ID = :NEW_BRANCH_ID
WHERE
VOUCHER_ID = X_VOUCHER_ID;
MESSAGE('Branch is changed sucessfully!');
MESSAGE('Branch is changed sucessfully!');
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
END;
COMMIT;
ELSE
MESSAGE('Please Enter Both Fields!');
MESSAGE('Please Enter both Fields!');
END IF;
代码的问题是,您的第一个SELECT
查询返回了多个记录,并且您试图将多个结果存储到单个变量X_VOUCHER_ID
中。
您需要更新表GL_VOUCHERS
而不将GL_VOUCHER_ID
保存到X_VOUCHER_ID
中,如下所示:
IF :CUSTOMER_ID IS NOT NULL AND :BRANCH_ID IS NOT NULL THEN DECLARE X_NO NUMBER; -- removed following variable -- X_VOUCHER_ID NUMBER; BEGIN --REMOVED THIS SELECT CLAUSE -- SELECT -- GL_VOUCHER_ID -- INTO X_VOUCHER_ID -- FROM -- SM_SALES_INVOICES SI, -- AR_CUSTOMERS AC, -- GL_VOUCHERS GV -- WHERE -- AC.CUSTOMER_ID = SI.CUSTOMER_ID -- AND SI.GL_VOUCHER_ID = GV.VOUCHER_ID -- AND SI.CUSTOMER_ID = :CUSTOMER_ID; UPDATE GL_VOUCHERS SET BRANCH_ID = :NEW_BRANCH_ID WHERE VOUCHER_ID IN ( -- ADDED THIS IN CLAUSE SELECT GL_VOUCHER_ID FROM SM_SALES_INVOICES SI, AR_CUSTOMERS AC, GL_VOUCHERS GV WHERE AC.CUSTOMER_ID = SI.CUSTOMER_ID AND SI.GL_VOUCHER_ID = GV.VOUCHER_ID AND SI.CUSTOMER_ID = :CUSTOMER_ID ); MESSAGE('Branch is changed sucessfully!'); MESSAGE('Branch is changed sucessfully!'); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END; COMMIT; ELSE MESSAGE('Please Enter Both Fields!'); MESSAGE('Please Enter both Fields!'); END IF;
上面的代码将更新与内部子查询中的GL_VOUCHERS
表匹配的所有记录。
干杯!