[8.1.7.4.0] gérer des exceptions avec EXECUTE IMMEDIATE ?
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:
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]