PL/SQL
Le langage PL/SQL permet de définir des procédures (ou fonctions) que le SGBD Oracle pourra traiter.
Ainsi, on peut directement effectuer des boucles avec des requêtes SQL.
Voici un exemple qui montre la forme d'une procédure :
CREATE OR REPLACE PROCEDURE nomDeLaProcedure
( parametreEnEntree IN number,
parametreEnSortie OUT varchar2,
parametreEnEntreeSortie IN OUT integer)
IS
//déclarations
BEGIN
//corps de la procédure
dbms_output.put_line('bonjour ' || parametreEnEntree || '.');
IF parametreEnEntree IS NULL THEN
RAISE MauvaisParametre;
END IF;
EXCEPTION
WHEN MauvaisParametre THEN
dbms_output.put_line('erreur : || parametreEnEntree || ' est nul.');
END; -- Procedure
Créons par exemple une procédure qui permet d'insérer une ville dans la table suivante :
VILLE ( numero, nom );
Cette procédure ne fait pas d'insertion si la ville y est déjà.
CREATE OR REPLACE PROCEDURE ins_ville(id NUMBER, nomVille in VARCHAR2) IS
nbVilles INTEGER;/*pour compter le nombre de villes*/
DejaPresent EXCEPTION;
BEGIN
SELECT COUNT(*) INTO nbVilles FROM ville WHERE nom=nomVille;
IF nbVilles > 0 THEN
RAISE dejaPresent;
ELSE
INSERT INTO ville VALUES (id, nomVille);
END IF;
EXCEPTION
WHEN DejaPresent THEN Dbms_Output.put_line('Insertion non réalisée : cette ville existe déjà.');
END;

Autre exemple d'affichage de données d'une table travail comprenant des tâches :
On affiche les tâches à exécuter ayant la difficulté passée en paramètre.
CREATE OR REPLACE PROCEDURE afficher(vDifficulte in VARCHAR2) IS
CURSOR cTravail IS SELECT * FROM travail WHERE difficulte=vDifficulte;
BEGIN
FOR i IN cTravail
LOOP
Dbms_Output.put_line('- tâche n° '||i.numero||'. A faire : '||i.tache||' .');
END LOOP;
END afficher;
Comment faire saisir des valeurs à l'utilisateur dans une procédure PLSQL ?
|
Il peut être intéressant de demander des valeurs à l'utilisateur dans des procédures PL/SQL. Voici un exemple :
CREATE OR REPLACE PROCEDURE TEST_PROC
( param1 IN number,
param2 IN varchar2)
IS
BEGIN
dbms_output.put_line('param1 vaut ' || param1);
dbms_output.put_line('param2 vaut ' || param2);
EXCEPTION
WHEN others THEN
dbms_output.put_line('erreur ');
END; -- Procedure
Ensuite, il suffit de lancer cette procédure dans SqlPlus comme ceci :
exec test_proc(&1,&2);