Salut tout le monde,

Je débute en PL/SQL et je cherche à écrire une procédure contenant une requête SQL dynamique avec gestion d'exceptions.
En lisant l'article, technique et très complet, de SheikYerbouti sur EXECUTE IMMEDIATE, j'ai réussi à écrire la fonction mais il me manque la gestion des exceptions.

D'où ma question : est-il possible de gérer les exceptions avec EXECUTE IMMEDIATE ?

Pour information voici ma fonction actuelle dont le but est de lister le nombre de lignes d'une table fournie en paramètre pour chaque owner du schéma :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE OR REPLACE PROCEDURE CNT (PC_table_name VARCHAR2) IS
  LC_sql_stmt VARCHAR2(250);
  LN_nb_lignes NUMBER(8);
  CURSOR LCu_owners IS
    SELECT DISTINCT USERNAME
    FROM ALL_USERS
    ORDER BY 1;
  LC_owner ALL_USERS.USERNAME%TYPE;
BEGIN
  OPEN LCu_owners;
  LOOP
    FETCH LCU_owners INTO LC_owner;
    EXIT WHEN LCu_owners%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE('owner -> ' || LC_owner);
    LC_sql_stmt := ' SELECT COUNT(*) AS ' || UPPER(PC_table_name) ||
                   ' FROM ' || LC_owner || '.' || UPPER(PC_table_name);
    EXECUTE IMMEDIATE LC_sql_stmt INTO LN_nb_lignes;
    -- EXCEPTION WHEN OTHERS THEN
    --  DBMS_OUTPUT.PUT_LINE(LC_owner || ' -> NF');
    DBMS_OUTPUT.PUT_LINE(LC_owner || ' => ' || LN_nb_lignes);
  END LOOP;
  CLOSE LCu_owners;
END;
Remarque : j'ai mis en commentaire les lignes où je voudrais gérer les exceptions.

Merci.

[EDIT]j'ai modifié l'en-tête de la déclaration car c'est une PROCEDURE et non une FUNCTION[/EDIT]