Tout ce que vous devez changer est le DECLARE
(indiquant le début d'un bloc anonyme) à CREATE PROCEDURE
, avec la variable que vous définissez actuellement via une variable de substitution comme argument formel ; donc au lieu de :
DECLARE
veno emp.empno%type:=&veno;
vsal emp.sal%type;
vexp number;
BEGIN
...
END;
/
Réalisez :
CREATE OR REPLACE PROCEDURE my_proc (veno IN emp.empno%type)
AS
vsal emp.sal%type;
vexp number;
BEGIN
...
END;
/
Vous pouvez ensuite l'appeler à partir d'un bloc anonyme, ou dans SQL*Plus ou SQL Developer avec le execute
raccourci :
set serveroutput on
execute my_proc(&veno);
Cet exemple utilise toujours une variable de substitution, vous serez donc promu pour la valeur à utiliser, mais vous pouvez également transmettre directement un nombre.
En savoir plus sur la création de procédures et les types de paramètres .
Vous pouvez simplifier un peu le code pour réduire les répétitions et les nouvelles requêtes ; rechercher les expressions de cas et la clause de retour. Mais ce n'est pas directement pertinent.