Как я могу изменить этот скрипт, чтобы пропустить представления? - PullRequest
1 голос
/ 15 апреля 2020

Эти операторы перечисляют все столбцы, которые содержат определенный. Это также поиск просмотров, и мне нужно знать, как пропустить взгляды.

DECLARE
      match_count integer;
      v_search_string varchar2(4000) := 'FE/Operational';

    BEGIN  
      FOR t IN (SELECT owner,
                       table_name, 
                       column_name 
                  FROM all_tab_columns
                 WHERE data_type in ('VARCHAR2','VARCHAR','NCHAR','NVARCHAR2') )

      LOOP   
        BEGIN
          EXECUTE IMMEDIATE    
            'SELECT COUNT(*) FROM '||t.owner || '.' || t.table_name||
            ' WHERE '||t.column_name||' = :1'   
             INTO match_count  
            USING v_search_string; 
          IF match_count > 0 THEN 
            dbms_output.put_line( t.owner || '.' || t.table_name ||'
    '||t.column_name||' '||match_count );
          END IF; 
        EXCEPTION
          WHEN others THEN
            dbms_output.put_line( 'Error encountered trying to read ' ||
                                  t.column_name || ' from ' || 
                                  t.owner || '.' || t.table_name );
            dbms_output.put_line(SQLERRM);
        END;
      END LOOP;
    END;
    /

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Вы можете использовать представление ALL_OBJECT для включения только следующих таблиц:

SELECT
    ATT.OWNER,
    ATT.TABLE_NAME,
    ATT.COLUMN_NAME
FROM
    ALL_TAB_COLUMNS ATT JOIN ALL_OBJECTS AO
    ON ATT.TABLE_NAME = AO.OBJECT_NAME AND ATT.OWNER = AO.OWNER
WHERE
    DATA_TYPE IN (
        'VARCHAR2',
        'VARCHAR',
        'NCHAR',
        'NVARCHAR2'
    )
    AND AO.OBJECT_TYPE = 'TABLE'
0 голосов
/ 15 апреля 2020

Вы можете присоединиться к вашему запросу на all_objects и проверить, что тип объекта является таблицей:

SELECT owner,
       table_name, 
       column_name 
FROM   all_tab_columns atc
JOIN   all_object ao ON atc.table_name = ao.object_name AND
                        atc.owner = ao.owner
WHERE  data_type IN ('VARCHAR2', 'VARCHAR', 'NCHAR', 'NVARCHAR2') AND
       object_type = 'TABLE'
...