データベース内のすべてのビューで、「%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;