Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 11/02/2010 15:01:04
- mich30
- Membre
pl/sql boucle qui continue
Bonjour
Je droppe des triggers si jamais un trigger n'existe pas il sort en erreur,
comment faire meme s'il y a erreur (trigger non trouvé) le traitement continue
merci
/* Ouverture Curseur*/
open c_com;
LOOP
FETCH c_com into l_va_schema,l_va_table;
IF l_va_table IS NOT NULL then
l_va_tmp:='';
l_va_tmp := 'DROP TRIGGER' || ' trg_' || l_va_table || ' ON ' || l_va_schema ||'.' || l_va_table ;
EXECUTE l_va_tmp;
RAISE NOTICE ' l_va_tmp ---> %', l_va_tmp;
END IF;
EXIT WHEN NOT FOUND;
END LOOP;
Hors ligne
#2 11/02/2010 15:38:18
- mich30
- Membre
Re : pl/sql boucle qui continue
j'ai fait ca
LOOP
FETCH c_com into l_va_schema,l_va_table;
IF l_va_table IS NOT NULL then
select count(*) as trigger_existe from information_schema.triggers where trigger_schema != 'pg_catalog'
and trigger_schema = v_name_schema
and trigger_name=' trg_' || l_va_table;
If trigger_existe > 0 Then
l_va_tmp:='';
l_va_tmp := 'DROP TRIGGER' || ' trg_' || l_va_table || ' ON ' || l_va_schema ||'.' || l_va_table ;
EXECUTE l_va_tmp;
RAISE NOTICE ' l_va_tmp ---> %', l_va_tmp;
END IF;
END IF;
EXIT WHEN NOT FOUND;
END LOOP;
mais cela ne marche pas
Hors ligne
#3 11/02/2010 18:06:42
- gleu
- Administrateur
Re : pl/sql boucle qui continue
Cette instruction n'est pas correcte :
select count(*) as trigger_existe from information_schema.triggers where trigger_schema != 'pg_catalog'
and trigger_schema = v_name_schema
Ça devrait être :
select into trigger_existe count(*) from information_schema.triggers where trigger_schema != 'pg_catalog'
and trigger_schema = v_name_schema
Attention à bien déclarer trigger_existe avant.
Guillaume.
Hors ligne
#4 12/02/2010 07:54:48
- Marc Cousin
- Membre
Re : pl/sql boucle qui continue
Par ailleurs c'est une mauvaise habitude de faire un count(*) juste pour prouver l'existence d'au moins un enregistrement, même si dans ce cas, ce n'est pas gênant. Un simple
select into trigger_existe 1 from information_schema.triggers where trigger_schema != 'pg_catalog'
and trigger_schema = v_name_schema LIMIT 1
Si trigger_existe vaut null et pas 1, c'est que l'enregistrement n'existe pas. Dans le cas présent, pas de souci, mais si la requête ramenait des centaines d'enregistrements et était appelée souvent…
Marc.
Hors ligne
#5 12/02/2010 09:38:28
- gleu
- Administrateur
Re : pl/sql boucle qui continue
Entièrement d'accord.
Guillaume.
Hors ligne
#6 12/02/2010 17:31:06
- mich30
- Membre
Re : pl/sql boucle qui continue
merci
Hors ligne
Pages : 1