Tutto ciò che devi modificare è il DECLARE
(indicando l'inizio di un blocco anonimo) a CREATE PROCEDURE
, con la variabile che stai attualmente impostando tramite una variabile di sostituzione come argomento formale; quindi invece di:
DECLARE
veno emp.empno%type:=&veno;
vsal emp.sal%type;
vexp number;
BEGIN
...
END;
/
Fallo:
CREATE OR REPLACE PROCEDURE my_proc (veno IN emp.empno%type)
AS
vsal emp.sal%type;
vexp number;
BEGIN
...
END;
/
Puoi quindi chiamarlo da un blocco anonimo o in SQL*Plus o SQL Developer con execute
stenografia:
set serveroutput on
execute my_proc(&veno);
Questo esempio utilizza ancora una variabile di sostituzione, quindi verrai promosso per il valore da utilizzare, ma puoi anche passare direttamente un numero.
Ulteriori informazioni sulla creazione di procedure e i tipi di parametri .
Potresti semplificare un po' il codice per ridurre le ripetizioni e le richieste; cercare le espressioni case e la clausola di ritorno. Ma non è direttamente rilevante.