Sql 在搜索值之前检查视图中是否存在列

Sql 在搜索值之前检查视图中是否存在列,sql,view,plsql,Sql,View,Plsql,我正在尝试搜索数据库中的每个视图,查找“%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%”之类的特定值

我想出了这个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;
但是当我尝试运行它时,我在执行即时查询中得到了列名的无效标识符错误

对我来说,问题很明显,不是每个视图都有列的名称,但我不知道如何在循环遍历所有视图时,在运行查询之前检查列是否存在

我还可以使用一个稍微修改过的版本来运行所有的表,虽然它们不都有该列,但我没有遇到这个问题

编辑:我包含了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;

我假设这是Oracle,因为您标记了pl/sql。您可以使用Oracle的元数据表查看表/视图有哪些列。具体地说


我假设这是Oracle,因为您标记了pl/sql。您可以使用Oracle的元数据表查看表/视图有哪些列。具体地说


这将查询具有列名称(如“%START%”)的每个视图

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;   

这将查询具有列名称(如“%START%”)的每个视图

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;   

对不起,我应该提到我知道如何查询各个视图/表中的哪些列。我的问题是,在遍历所有列时,我不知道如何检查特定列是否存在。有太多的视图无法单独执行此操作,据我所知,没有ifcolumn_name.exists{}功能。我在编辑中包含了我用来在表中循环的代码。@user1399217我看不出问题出在哪里。所有的tab列都返回table和viewsorry,我应该提到我知道如何查询各个视图/表中的哪些列。我的问题是,在遍历所有列时,我不知道如何检查特定列是否存在。有太多的视图无法单独执行此操作,据我所知,没有ifcolumn_name.exists{}功能。我在编辑中包含了我用来在表中循环的代码。@user1399217我看不出问题出在哪里。所有_tab_列都返回表和视图