Wszystko, co musisz zmienić, to DECLARE
(wskazujący początek anonimowego bloku) do CREATE PROCEDURE
, ze zmienną, którą aktualnie ustawiasz za pomocą zmiennej zastępczej jako argumentu formalnego; więc zamiast:
DECLARE
veno emp.empno%type:=&veno;
vsal emp.sal%type;
vexp number;
BEGIN
...
END;
/
Zrób to:
CREATE OR REPLACE PROCEDURE my_proc (veno IN emp.empno%type)
AS
vsal emp.sal%type;
vexp number;
BEGIN
...
END;
/
Następnie możesz wywołać to z anonimowego bloku lub w SQL*Plus lub SQL Developer za pomocą execute
skrót:
set serveroutput on
execute my_proc(&veno);
W tym przykładzie nadal używana jest zmienna podstawiania, więc będziesz awansowany na wartość do użycia, ale możesz również przekazać liczbę bezpośrednio.
Przeczytaj więcej o tworzeniu procedur oraz typy parametry .
Mógłbyś trochę uprościć kod, aby zmniejszyć liczbę powtórzeń i ponownych zapytań; wyszukaj wyrażenia przypadku i klauzulę zwracającą. Ale to nie ma bezpośredniego znaczenia.