Oracle
 sql >> Datenbank >  >> RDS >> Oracle

falsche Anzahl oder Arten von Argumenten im Aufruf meiner Prozedur

Wenn Sie das zweite und dritte Argument nicht benötigen, können Sie diese wie folgt als Variablen statt als Argumente in der Prozedur deklarieren:

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;

Ich habe ein Beispiel für einen EXCEPTION-Handler am Ende von DD_PAY eingefügt. Es ist immer eine gute Idee, zumindest diesen minimalen Handler einzufügen, damit Sie im Falle einer Ausnahme einen Hinweis darauf erhalten, wo das Problem liegt.

Da diese Prozedur einen BOOLEAN-Wert zurückgibt und BOOLEANs (meines Wissens nach) nicht von SQL*Plus aus verwendet werden können, müssen Sie sie wie folgt von einem PL/SQL-Block aufrufen:

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;

Probieren Sie es aus.

BEARBEITEN:Verfahren basierend auf weiteren Informationen aus späteren Kommentaren umgeschrieben.

Teilen und genießen.