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

Posted

技术标签:

【中文标题】在搜索值之前检查视图中是不是存在列【英文标题】:Checking for the existence of a column in a view before searching for a value在搜索值之前检查视图中是否存在列 【发布时间】:2012-11-02 17:48:37 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

select count(*) 
from user_tab_columns 
where table_name = [name of view] 
and column_name = [name of column]

【讨论】:

对不起,我应该提到我确实知道如何查询各个视图/表的列。我的问题是我不知道如何在遍历所有列时检查特定列是否存在。有太多视图可以单独执行此操作,据我所知,没有 if(column_name.exists) 功能。我在编辑中包含了用于循环遍历表格的代码。 @user1399217 我看不到问题出在哪里。 all_tab_columns 返回表和视图【参考方案2】:

这应该查询每个具有类似 '%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;   

【讨论】:

以上是关于在搜索值之前检查视图中是不是存在列的主要内容,如果未能解决你的问题,请参考以下文章

MySql 检查值是不是存在,然后将它们作为不同的列返回

如何检查数据表中是不是存在值

PHP如何检查一个数组内是不是存在指定元素

在javascript中搜索对象中的值[关闭]

检查 DF 中是不是存在列 - Java Spark

检查列上是不是存在函数