Maison >base de données >tutoriel mysql >Comment trouver une valeur spécifique dans toutes les tables et colonnes d'une base de données Oracle ?

Comment trouver une valeur spécifique dans toutes les tables et colonnes d'une base de données Oracle ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-22 12:52:10378parcourir

How to Find a Specific Value Across All Tables and Columns in an Oracle Database?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn