Oracle
 sql >> Base de données >  >> RDS >> Oracle

Rechercher une chaîne donnée dans tous les champs d'un schéma entier pour Oracle

"ALL_TAB_COLUMNS " est un système, a toutes les colonnes de table de type de données, etc.

"USER_TAB_COLUMNS " est un système, toutes les colonnes de la table ont le type de données, etc. (dont le propriétaire est l'utilisateur actuel). (Merci René)

Un exemple :

 SET SERVEROUTPUT ON SIZE 100000 -- maybe you have a lot of table and columns

    DECLARE
      matches INTEGER;
    BEGIN
      FOR columns IN (SELECT table_name, column_name FROM user_tab_columns where data_type = 'VARCHAR2') LOOP

        EXECUTE IMMEDIATE
          'SELECT COUNT(*) FROM '||t.table_name||' WHERE instr('||t.column_name||' , :1) > 0'
          INTO matches
          USING 'What you search';

        IF matches > 0 THEN
          dbms_output.put_line( t.table_name ||' '||t.column_name||' '||matches );
        END IF;

      END LOOP;

    END;
    /

cette requête affichera table_name '' column_name '' et comptera, si vous avez des noms de colonne et de table standard, vous pouvez modifier la requête en tant que colonnes IF> 0 puis écrire une requête UNION en boucle et renvoyer le curseur, ou renvoyer une table,