PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#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

Pied de page des forums