Si vous n'avez pas besoin des deuxième et troisième arguments, vous pouvez les déclarer comme variables dans la procédure au lieu d'arguments, comme suit :
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;
J'ai inclus un exemple de gestionnaire EXCEPTION à la fin de DD_PAY. C'est toujours une bonne idée d'inclure au moins ce gestionnaire minimal afin qu'en cas d'exception, vous ayez une indication de l'endroit où se situe le problème.
Étant donné que cette procédure renvoie une valeur BOOLEAN et que les BOOLEAN ne peuvent pas (à ma connaissance) être utilisés à partir de SQL*Plus, vous devrez l'invoquer à partir d'un bloc PL/SQL, comme suit :
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;
Essayez-le.
EDIT :procédure réécrite sur la base d'informations supplémentaires issues de commentaires ultérieurs.
Partagez et profitez.