Het enige dat u hoeft te wijzigen, is de DECLARE
(geeft het begin van een anonieme blokkering aan) om CREATE PROCEDURE
, met de variabele die u momenteel instelt via een substitutievariabele als formeel argument; dus in plaats van:
DECLARE
veno emp.empno%type:=&veno;
vsal emp.sal%type;
vexp number;
BEGIN
...
END;
/
Maak het:
CREATE OR REPLACE PROCEDURE my_proc (veno IN emp.empno%type)
AS
vsal emp.sal%type;
vexp number;
BEGIN
...
END;
/
Je kunt dat dan aanroepen vanuit een anoniem blok, of in SQL*Plus of SQL Developer met de execute
steno:
set serveroutput on
execute my_proc(&veno);
In dit voorbeeld wordt nog steeds een vervangingsvariabele gebruikt, dus u wordt gepromoveerd voor de te gebruiken waarde, maar u kunt ook rechtstreeks een getal doorgeven.
Lees meer over het maken van procedures en de typen parameters .
Je zou de code een beetje kunnen vereenvoudigen om herhaling en opnieuw opvragen te verminderen; zoek case-expressies en de terugkerende clausule op. Maar dat is niet direct relevant.