L'Informatique
HTML |  Javascript |  DOM |  PHP |  PHP-MySql |  Sessions en PHP |  JSP |  TomCat |  ASP
Java |  C |  C# | 
SQL |  Oracle |  PL/SQL |  les index |  Données multimédia : les LOBs |  Intermedia Text |  projet ORDVideo & Java
BMP |  PBM |  PGM |  PPM | 
UML |  Diagramme Use Case |  Diagramme de classes | 
Liens informatique |  Autres Liens | 

Recherche personnalisée

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;



oracle plsql



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);



Romain C