Alt du skal ændre er DECLARE
(angiver starten af en anonym blok) til CREATE PROCEDURE
, med den variabel du i øjeblikket indstiller via en substitutionsvariabel som et formelt argument; så i stedet for:
DECLARE
veno emp.empno%type:=&veno;
vsal emp.sal%type;
vexp number;
BEGIN
...
END;
/
Lav det:
CREATE OR REPLACE PROCEDURE my_proc (veno IN emp.empno%type)
AS
vsal emp.sal%type;
vexp number;
BEGIN
...
END;
/
Du kan derefter kalde det fra en anonym blok eller i SQL*Plus eller SQL Developer med execute
stenografi:
set serveroutput on
execute my_proc(&veno);
Dette eksempel bruger stadig en substitutionsvariabel, så du vil blive forfremmet til den værdi, der skal bruges, men du kan også sende et tal direkte.
Læs mere om oprettelse af procedurer og typerne af parametre .
Du kunne forenkle koden en del for at reducere gentagelser og forespørgsler; slå kasusudtryk og den returnerende klausul op. Men det er ikke direkte relevant.