在Oracle数据库中搜索任何表和列中的特定值
您需要在Oracle数据库中大量的表和字段中查找特定值。尽管您对数据的来源了解有限,但值“1/22/2008P09RR8”保持不变。
查找候选列
虽然您最初的查询尝试根据预期的命名模式“%DTN%”来识别候选列,但这并没有成功。相反,以下查询提供了更准确的搜索:
<code class="language-sql">SELECT owner, table_name, column_name FROM all_tab_columns WHERE column_name LIKE '%DTN%';</code>
但是,如果“DTN”只是一个推测,这种方法可能无法产生预期的结果。
搜索所有列
假设该值确实存储在一个列中,您可以使用以下方法系统地搜索每个表中的每一列:
方法一:动态SQL
使用PL/SQL和动态SQL,您可以生成并在运行时执行SQL查询。以下代码片段实现了这一点:
<code class="language-sql">SET SERVEROUTPUT ON SIZE 100000 DECLARE match_count INTEGER; BEGIN FOR t IN (SELECT owner, table_name, column_name FROM all_tab_columns WHERE owner != 'SYS' and data_type LIKE '%CHAR%') LOOP EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || t.owner || '.' || t.table_name || ' WHERE '||t.column_name||' = :1' INTO match_count USING '1/22/2008P09RR8'; IF match_count > 0 THEN dbms_output.put_line( t.table_name ||' '||t.column_name||' '||match_count ); END IF; END LOOP; END; /</code>
方法二:脚本查询
或者,您可以为每个表中的每一列生成单独的SQL查询。例如,对于名为“table1”的表,查询将类似于:
<code class="language-sql">SELECT * FROM table1 WHERE column1 = 'value' OR column2 = 'value' OR column3 = 'value' ... ;</code>
通过使用这些方法,您可以仔细搜索Oracle数据库的广阔空间,以查找难以捉摸的值“1/22/2008P09RR8”。
以上是如何在 Oracle 数据库中的所有表和列中查找特定值?的详细内容。更多信息请关注PHP中文网其他相关文章!