L3 Info : SGBD
 
◃  Ch. 11 Oracle PL/SQL  ▹
 

Les procédures

  • Une procédure est un sous-programme respectant la syntaxe suivante :
    CREATE [OR REPLACE] PROCEDURE nomProc (param1, paramn) IS 
      -- zone de déclaration des variables locales
    BEGIN
    ...
    EXCEPTION
    ...
    END;
  • Une variable paramètre suit la syntaxe suivante :
    nom_param [IN|OUT|IN OUT] type_param
  • Exemple :
    CREATE OR REPLACE PROCEDURE associeLivreAuteur(numLivre NUMBER, idAuteur NUMBER) IS
      CURSOR cursLivre IS SELECT LIV_NUM FROM LIVRE WHERE LIV_NUM=numLivre;
      CURSOR cursAuteur IS SELECT AUT_ID FROM AUTEUR WHERE AUT_ID=idAuteur;
      valeur NUMBER;
      alerteLivre EXCEPTION;
      alerteAuteur EXCEPTION;
    BEGIN
      OPEN cursLivre;
      FETCH cursLivre INTO valeur;
      IF cursLivre%NOTFOUND THEN
        RAISE alerteLivre;
      END IF;
      OPEN cursAuteur;
      FETCH cursAuteur INTO valeur;
      IF cursAuteur%NOTFOUND THEN
        RAISE alerteAuteur;
      END IF;
      INSERT INTO ECRIT(liv_num, aut_id) VALUES (numLivre,idAuteur);
    EXCEPTION
      WHEN alerteLivre THEN
        DBMS_OUTPUT.PUT_LINE('LIV_NUM NON VALIDE');
      WHEN alerteAuteur THEN
        DBMS_OUTPUT.PUT_LINE('AUT_ID NON VALIDE');
    END;
    
  • Exécution :
    sql> CALL associeLivreAuteur(150,100)
    [2018-12-07 11:41:49] completed in 5 ms
    [2018-12-07 11:41:49] LIV_NUM NON VALIDE
    sql> CALL associeLivreAuteur(1,100)
    [2018-12-07 11:41:53] completed in 5 ms
    [2018-12-07 11:41:53] AUT_ID NON VALIDE
    sql> CALL associeLivreAuteur(1,1)
    [2018-12-07 11:41:57] [23000][1] ORA-00001: unique constraint (FOURNIED.SYS_C007721) violated
    [2018-12-07 11:41:57] ORA-06512: at "FOURNIED.ASSOCIELIVREAUTEUR", line 18