使用 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
字符串。结果表明两个表(EMPLOYEE
和 EMP
)包含一行具有这样的值。
根据您的需要进行调整。
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 时过滤列值的主要内容,如果未能解决你的问题,请参考以下文章