Se non hai bisogno del secondo e del terzo argomento, puoi dichiararli come variabili nella procedura invece che come argomenti, come segue:
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;
Ho incluso un esempio di un gestore EXCEPTION alla fine di DD_PAY. È sempre una buona idea includere almeno questo gestore minimo in modo che nel caso in cui si verifichi un'eccezione avrai qualche indicazione su dove si trova il problema.
Poiché questa procedura restituisce un valore BOOLEAN e BOOLEAN non può (per quanto ne so) essere utilizzato da SQL*Plus, dovrai richiamarlo da un blocco PL/SQL, come segue:
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;
Fai un tentativo.
EDIT:procedura riscritta sulla base di ulteriori informazioni dai commenti successivi.
Condividi e divertiti.