Om du inte behöver det andra och tredje argumentet kan du deklarera dem som variabler i proceduren istället för argument, enligt följande:
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;
Jag har inkluderat ett exempel på en EXCEPTION-hanterare i slutet av DD_PAY. Det är alltid en bra idé att inkludera åtminstone denna minimala hanterare så att i händelse av att ett undantag inträffar får du en indikation om var problemet ligger.
Eftersom den här proceduren returnerar ett BOOLEAN-värde och BOOLEAN-värden (såvitt jag vet) inte kan användas från SQL*Plus, måste du anropa det från ett PL/SQL-block enligt följande:
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;
Ge det ett försök.
EDIT:omskrev proceduren baserat på ytterligare information från senare kommentarer.
Dela och njut.