Oracle
 sql >> Database >  >> RDS >> Oracle

numero o tipi di argomenti errati nella chiamata alla mia procedura

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.