Allt du behöver ändra är DECLARE
(indikerar början av ett anonymt block) till CREATE PROCEDURE
, med variabeln du för närvarande ställer in via en substitutionsvariabel som ett formellt argument; så istället för:
DECLARE
veno emp.empno%type:=&veno;
vsal emp.sal%type;
vexp number;
BEGIN
...
END;
/
Gör det:
CREATE OR REPLACE PROCEDURE my_proc (veno IN emp.empno%type)
AS
vsal emp.sal%type;
vexp number;
BEGIN
...
END;
/
Du kan sedan anropa det från ett anonymt block, eller i SQL*Plus eller SQL Developer med execute
stenografi:
set serveroutput on
execute my_proc(&veno);
Det här exemplet använder fortfarande en ersättningsvariabel så du kommer att befordras för värdet som ska användas, men du kan skicka ett nummer direkt också.
Läs mer om att skapa procedurer och typerna av parametrar .
Du kan förenkla koden en hel del för att minska upprepning och förfrågningar; slå upp kasusuttryck och den returnerande klausulen. Men det är inte direkt relevant.