Tudo que você precisa mudar é o
DECLARE
(indicando o início de um bloco anônimo) para CREATE PROCEDURE
, com a variável que você está configurando atualmente por meio de uma variável de substituição como um argumento formal; então em vez de:DECLARE
veno emp.empno%type:=&veno;
vsal emp.sal%type;
vexp number;
BEGIN
...
END;
/
Faça:
CREATE OR REPLACE PROCEDURE my_proc (veno IN emp.empno%type)
AS
vsal emp.sal%type;
vexp number;
BEGIN
...
END;
/
Você pode então chamar isso de um bloco anônimo, ou no SQL*Plus ou SQL Developer com o
execute
forma abreviada:set serveroutput on
execute my_proc(&veno);
Este exemplo ainda está usando uma variável de substituição para que você seja promovido para o valor a ser usado, mas também pode passar um número diretamente.
Leia mais sobre como criar procedimentos e os tipos de parâmetros .
Você pode simplificar bastante o código para reduzir a repetição e a repetição; procure expressões case e a cláusula de retorno. Mas isso não é diretamente relevante.