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.