sql >> Databasteknik >  >> RDS >> Oracle

fel antal eller typer av argument i anrop till min procedur

Om du inte behöver det andra och tredje argumentet kan du deklarera dem som variabler i proceduren istället för argument, enligt följande:

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;

Jag har inkluderat ett exempel på en EXCEPTION-hanterare i slutet av DD_PAY. Det är alltid en bra idé att inkludera åtminstone denna minimala hanterare så att i händelse av att ett undantag inträffar får du en indikation om var problemet ligger.

Eftersom den här proceduren returnerar ett BOOLEAN-värde och BOOLEAN-värden (såvitt jag vet) inte kan användas från SQL*Plus, måste du anropa det från ett PL/SQL-block enligt följande:

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;

Ge det ett försök.

EDIT:omskrev proceduren baserat på ytterligare information från senare kommentarer.

Dela och njut.




  1. PostgreSQL 9.5:Dölj lösenord från dblink-anslutning

  2. Kan du dra nytta av en anpassad databasapplikation?

  3. Främmande nyckel till ett av många bord?

  4. Mysql skapa databas med ny databasplats