1

データベース内のすべてのビューで、「%THIS%」のような特定の値を検索しようとしています

私はこのplsqlコードを思いついた

DECLARE
  match_count INTEGER;
BEGIN
  FOR t IN (SELECT name FROM user_dependencies where type = 'VIEW') LOOP

    EXECUTE IMMEDIATE 
    'SELECT COUNT(*) FROM '|| t.name || ' Where Column_Name LIKE ''%THIS%'' '
    INTO match_count;

    IF match_count > 0 THEN
      dbms_output.put_line( t.name ||' '||match_count );
    END IF;

  END LOOP;
END;

しかし、実行しようとすると、即時クエリの実行で列名に対して無効な識別子エラーが発生します。

私にとっての問題は、すべてのビューに Column_Name があるわけではないことは明らかですが、すべてのビューをループするため、クエリを実行する前に列が存在するかどうかを確認する方法がわかりません。

これを少し変更したバージョンを使用して、すべてのテーブルを実行することもできました。すべてのテーブルにその列があるわけではありませんが、この問題には遭遇しませんでした。

編集:テーブルをループするために使用できたplsqlコードを含めています。

DECLARE
  match_count INTEGER;
BEGIN
  FOR t IN (SELECT table_name, column_name FROM all_tab_columns 
            where table_name LIKE 'THIS%' and data_type = 'VARCHAR2' AND column_name = 'Column_name') LOOP

    EXECUTE IMMEDIATE 
    'SELECT COUNT(*) FROM '||t.table_name || ' Where Column_name LIKE ''%THIS%'' '
    INTO match_count;

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

  END LOOP;
END;
4

2 に答える 2

4

pl/sql にタグを付けたので、これは Oracle だと思います。Oracle のメタデータ テーブルを使用して、テーブル/ビューに含まれる列を確認できます。特にUSER_TAB_COLUMNS

select count(*) 
from user_tab_columns 
where table_name = [name of view] 
and column_name = [name of column]
于 2012-11-02T17:57:42.523 に答える
0

これは、'%START%' のような column_name を持つすべてのビューを照会する必要があります

declare
cursor getViews is
select table_name, column_name from user_tab_cols where table_name in
(select view_name from user_views)
and column_name like '%START%';
myResult number;
BEGIN
   for i in getViews
   LOOP
      execute immediate 'select count(*) from '||i.table_name into myResult;
   END LOOP;
END;   
于 2012-11-02T19:11:16.270 に答える