Rechercher des valeurs spécifiques dans n'importe quelle table et colonne de la base de données Oracle
Vous devez rechercher une valeur spécifique dans un grand nombre de tables et de champs d'une base de données Oracle. Bien que vous ayez une connaissance limitée de l'origine des données, la valeur « 22/01/2008P09RR8 » reste inchangée.
Trouver des colonnes de candidats
Bien que votre requête initiale ait tenté d'identifier les colonnes candidates en fonction du modèle de dénomination attendu "%DTN%", cela n'a pas abouti. Au lieu de cela, la requête suivante fournit une recherche plus précise :
<code class="language-sql">SELECT owner, table_name, column_name FROM all_tab_columns WHERE column_name LIKE '%DTN%';</code>
Cependant, si « DTN » n'est qu'une spéculation, cette approche pourrait ne pas produire les résultats escomptés.
Rechercher dans toutes les colonnes
En supposant que la valeur est bien stockée dans une colonne, vous pouvez systématiquement rechercher chaque colonne de chaque table en utilisant :
Méthode 1 : SQL dynamique
En utilisant PL/SQL et Dynamic SQL, vous pouvez générer et exécuter des requêtes SQL au moment de l'exécution. L'extrait de code suivant permet d'y parvenir :
<code class="language-sql">SET SERVEROUTPUT ON SIZE 100000 DECLARE match_count INTEGER; BEGIN FOR t IN (SELECT owner, table_name, column_name FROM all_tab_columns WHERE owner != 'SYS' and data_type LIKE '%CHAR%') LOOP EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || t.owner || '.' || t.table_name || ' WHERE '||t.column_name||' = :1' INTO match_count USING '1/22/2008P09RR8'; IF match_count > 0 THEN dbms_output.put_line( t.table_name ||' '||t.column_name||' '||match_count ); END IF; END LOOP; END; /</code>
Méthode 2 : Requête de script
Vous pouvez également générer des requêtes SQL distinctes pour chaque colonne de chaque table. Par exemple, pour une table nommée "table1", la requête ressemblerait à :
<code class="language-sql">SELECT * FROM table1 WHERE column1 = 'value' OR column2 = 'value' OR column3 = 'value' ... ;</code>
En utilisant ces méthodes, vous pouvez rechercher soigneusement dans le vaste espace de la base de données Oracle la valeur insaisissable « 22/01/2008P09RR8 ».
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!