Utilisation de variables en PL
Fermé
bossoax
-
18 déc. 2009 à 12:47
Moerco-fr Messages postés 5 Date d'inscription mercredi 2 avril 2008 Statut Membre Dernière intervention 19 décembre 2009 - 19 déc. 2009 à 01:40
Moerco-fr Messages postés 5 Date d'inscription mercredi 2 avril 2008 Statut Membre Dernière intervention 19 décembre 2009 - 19 déc. 2009 à 01:40
A voir également:
- Utilisation de variables en PL
- Notice d'utilisation - Guide
- Utilisation chromecast - Guide
- Vous avez utilisé ce numéro de téléphone à de trop nombreuses reprises - Forum Gmail
- Impossible d'utiliser ce numéro de téléphone pour la validation. - Forum Gmail
1 réponse
Moerco-fr
Messages postés
5
Date d'inscription
mercredi 2 avril 2008
Statut
Membre
Dernière intervention
19 décembre 2009
3
19 déc. 2009 à 01:40
19 déc. 2009 à 01:40
A partir du moment où les tables et les colonnes sont variables, il faut passer par du SQL dynamique car au moment de la compilation, le parser du PL-SQL ne saura pas vérifier la validité des objets sur lesquels porte la requête.
La solution se trouve à cette adresse (c'est la doc 11g, mais ça reste valable jusqu'à la 8i au moins):
https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/dynamic.htm#i13057
Ce qui donnerait dans ton cas (pas testé car je n'ai pas de noyau installé sous la main) :
La solution se trouve à cette adresse (c'est la doc 11g, mais ça reste valable jusqu'à la 8i au moins):
https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/dynamic.htm#i13057
Ce qui donnerait dans ton cas (pas testé car je n'ai pas de noyau installé sous la main) :
declare cursor crs_tab is select TABLE_NAME, COLUMN_NAME from USER_TAB_COLUMNS where DATA_TYPE like '%CHAR%' order by TABLE_NAME, COLUMN_NAME; type crs_compte_typ is REF CURSOR; crs_compte crs_compte_typ; v_query VARCHAR2(4000); compte INTEGER; begin for tab in crs_tab loop v_query := 'select count(1)' || ' from '||tab.table_name ||' where '||tab.column_name||' like ''%' || chr(146) || '%'''; open crs_compte for v_query; fetch crs_compte into compte; close crs_compte; end loop; end; /