Nếu bạn không cần đối số thứ hai và thứ ba, bạn có thể khai báo chúng dưới dạng biến trong thủ tục thay vì đối số, như sau:
CREATE OR REPLACE PROCEDURE DDPAY_SP(DONOR_ID IN DD_DONOR.IDDONOR%TYPE,
RET OUT BOOLEAN)
IS
nPayment_count NUMBER;
BEGIN
SELECT COUNT(*)
INTO nPayment_count
FROM DD_PLEDGE p
WHERE p.IDDONOR = DONOR_ID AND
p.IDSTATUS = 10 AND
p.PAYMONTHS > 0;
IF nPayment_count > 0 THEN
RET := TRUE;
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('DD_PAY - exception: ' || SQLCODE || ' : ' || SQLERRM);
RAISE;
END DDPAY_SP;
Tôi đã bao gồm một ví dụ về trình xử lý EXCEPTION ở cuối DD_PAY. Luôn luôn là một ý kiến hay khi bao gồm ít nhất trình xử lý tối thiểu này để trong trường hợp có ngoại lệ xảy ra, bạn sẽ nhận được một số dấu hiệu cho biết vấn đề nằm ở đâu.
Bởi vì thủ tục này trả về một giá trị BOOLEAN và BOOLEAN không thể (theo hiểu biết của tôi) được sử dụng từ SQL * Plus, bạn sẽ phải gọi nó từ một khối PL / SQL, như sau:
DECLARE
bRetval BOOLEAN;
BEGIN
DD_PAY(308, bRetval);
DBMS_OUTPUT.PUT_LINE('Returned value is ' ||
CASE bRetval
WHEN TRUE THEN 'TRUE'
ELSE 'FALSE'
END);
END;
Hãy thử.
CHỈNH SỬA:viết lại quy trình dựa trên thông tin thêm từ các nhận xét sau.
Chia sẻ và tận hưởng.