Jika Anda tidak memerlukan argumen kedua dan ketiga, Anda dapat mendeklarasikannya sebagai variabel dalam prosedur alih-alih argumen, sebagai berikut:
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;
Saya telah menyertakan contoh penangan PENGECUALIAN di akhir DD_PAY. Itu selalu merupakan ide yang baik untuk menyertakan setidaknya penangan minimal ini sehingga jika terjadi pengecualian, Anda akan mendapatkan beberapa indikasi di mana letak masalahnya.
Karena prosedur ini mengembalikan nilai BOOLEAN, dan BOOLEAN tidak dapat (sepengetahuan saya) digunakan dari SQL*Plus, Anda harus memanggilnya dari blok PL/SQL, sebagai berikut:
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;
Cobalah.
EDIT:prosedur penulisan ulang berdasarkan informasi lebih lanjut dari komentar selanjutnya.
Bagikan dan nikmati.