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

Problema con il parametro inout di Oracle Stored Procedure - Ho la soluzione - Errore di battitura

Alcuni problemi:

  1. VARHAR2 un errore di battitura e dovrebbe essere VARCHAR2 .
    • Potresti invece specificare i tipi di dati per fare riferimento alle colonne della tabella corrispondenti usando table_name.column_name%TYPE .
  2. La procedura non restituisce nulla - devi cambiare uno dei IN parametri a un OUT (o un IN OUT parametro).
  3. La tua query non specifica un nome di tabella.
  4. Puoi usare SELECT ... INTO ... piuttosto che un CURSOR .

Qualcosa del genere:

CREATE OR REPLACE PROCEDURE FIRSTPROC (
  ID1 IN  table_name.id1val%TYPE,
  ID2 OUT table_name.id2val%TYPE
)
AS
BEGIN
  DBMS_OUTPUT.PUT_LINE(ID1);
  SELECT id2val
  INTO   ID2
  FROM   table_name
  WHERE  id1val = ID1;
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    ID2 := 0; -- Or you could use NULL
  WHEN TOO_MANY_ROWS THEN
    ID2 := 0; -- Or you could use NULL
END;
/