我知道這是一個老話題。但我看到一個問題的評論,詢問是否可以在SQL
而不是使用PL/SQL
完成。所以想到發佈解決方案。
下面的演示是Search for a VALUE in all COLUMNS of all TABLES in an entire SCHEMA:
讓我們來看看該值KING
在SCOTT
架構。
SQL> variable val varchar2(10)
SQL> exec :val := 'KING'
PL/SQL procedure successfully completed.
SQL> SELECT DISTINCT SUBSTR (:val, 1, 11) "Searchword",
2 SUBSTR (table_name, 1, 14) "Table",
3 SUBSTR (column_name, 1, 14) "Column"
4 FROM cols,
5 TABLE (xmlsequence (dbms_xmlgen.getxmltype ('select '
6 || column_name
7 || ' from '
8 || table_name
9 || ' where upper('
10 || column_name
11 || ') like upper(''%'
12 || :val
13 || '%'')').extract ('ROWSET/ROW/*'))) t
14 ORDER BY "Table"
15/
Searchword Table Column
----------- -------------- --------------
KING EMP ENAME
SQL>
讓我們來看看該值20
在SCOTT
架構。
SQL> variable val NUMBER
SQL> exec :val := 20
PL/SQL procedure successfully completed.
SQL> SELECT DISTINCT SUBSTR (:val, 1, 11) "Searchword",
2 SUBSTR (table_name, 1, 14) "Table",
3 SUBSTR (column_name, 1, 14) "Column"
4 FROM cols,
5 TABLE (xmlsequence (dbms_xmlgen.getxmltype ('select '
6 || column_name
7 || ' from '
8 || table_name
9 || ' where upper('
10 || column_name
11 || ') like upper(''%'
12 || :val
13 || '%'')').extract ('ROWSET/ROW/*'))) t
14 ORDER BY "Table"
15/
Searchword Table Column
----------- -------------- --------------
20 DEPT DEPTNO
20 EMP DEPTNO
20 EMP HIREDATE
20 SALGRADE HISAL
20 SALGRADE LOSAL
SQL>
我們能做到這一點使用單個查詢,而不是使用存儲過程? – Freakyuser 2013-12-23 07:37:29
是的,可以在純SQL中完成。請參閱[** SQL在整個SCHEMA中搜索所有表中的所有列的值**](https://lalitkumarb.wordpress.com/2015/01/06/sql-to-search-for-a-價值在所有在整個架構中的所有列中) – 2016-03-30 10:25:18
@LalitKumarB您列出的頁面不再可訪問。是否可以發佈一些信息作爲答案? – 2016-07-05 17:50:17