Oracle
 sql >> Base de données >  >> RDS >> Oracle

mauvais nombre ou types d'arguments dans l'appel à ma procédure

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.