使用 ALL_TAB_COLUMNS 时过滤列值

Posted

技术标签:

【中文标题】使用 ALL_TAB_COLUMNS 时过滤列值【英文标题】:Filter column value while using ALL_TAB_COLUMNS 【发布时间】:2021-03-24 18:20:44 【问题描述】:

在 SQL Oracle 中,有没有办法通过特定列中的值过滤 ALL_TAB_COLUMNS SELECT 语句?

【问题讨论】:

【参考方案1】:

是的;你需要带有动态 SQL 的 PL/SQL 来做到这一点。

这是我用来搜索当前用户表的示例,检查包含 ENAME 列的表,其中包含 SCOTT 字符串。结果表明两个表(EMPLOYEEEMP)包含一行具有这样的值。

根据您的需要进行调整。

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
  2    l_str VARCHAR2(500);
  3    l_cnt NUMBER := 0;
  4  BEGIN
  5    FOR cur_r IN (SELECT u.table_name, u.column_name
  6                  FROM user_tab_columns u, user_tables t
  7                  WHERE u.table_name = t.table_name
  8                    AND u.column_name = 'ENAME'
  9                 )
 10    LOOP
 11      l_str := 'SELECT COUNT(*) FROM ' || cur_r.table_name ||
 12              ' WHERE ' || cur_r.column_name || ' like (''%SCOTT%'')';
 13
 14      EXECUTE IMMEDIATE (l_str) INTO l_cnt;
 15
 16      IF l_cnt > 0 THEN
 17        dbms_output.put_line(l_cnt ||' : ' || cur_r.table_name);
 18      END IF;
 19    END LOOP;
 20  END;
 21  /
1 : EMPLOYEE
1 : EMP

PL/SQL procedure successfully completed.

SQL>

【讨论】:

以上是关于使用 ALL_TAB_COLUMNS 时过滤列值的主要内容,如果未能解决你的问题,请参考以下文章

使用 Django 查询计算过滤列值的总和时出错

使用匹配的文本框和列值过滤表

对列值使用变量提示和过滤语句

如果一个列值仅与另一列中的一个值相关联,则过滤掉行

根据火花数据框scala中的列值过滤行

是否可以使用 pyspark 过滤 Spark DataFrames 以返回列值在列表中的所有行?