我正在尝试在数据库中的每个视图中搜索诸如“%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;