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
Libérer: 2025-01-22 12:52:10
original
312 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal