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

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

【问题讨论】:

    标签: sql oracle oracle-sqldeveloper


    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-24
      • 2015-05-07
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-03
      相关资源
      最近更新 更多