oracle查询所有字段名sql,sql – 在所有表中搜索特定值的所有字段(Oracle)

引用:

I’ve tried using this statement below

to find an appropriate column based on

what I think it should be named but it

returned no results.*

06000

列不是对象。如果你的意思是你希望列名称像’%DTN%’,你想要的查询是:

SELECT owner, table_name, column_name FROM all_tab_columns WHERE column_name LIKE '%DTN%';

但是如果’DTN’字符串只是一个猜测你的一部分,这可能是没有帮助。

顺便问一下,你是否确定“1/22 / 2008P09RR8”是直接从单列中选择的值?如果你根本不知道它来自哪里,它可能是几个列的连接,或一些函数的结果,或一个值位于嵌套表对象中。所以你可能在一个疯狂的追逐试图检查每个列的值。你不能从任何客户端应用程序显示这个值开始,并试图找出它正在使用什么查询获得它?

无论如何,diciu的答案给出一个生成SQL查询的方法来检查每个表的每一列的值。你也可以在一个SQL会话中使用PL / SQL块和动态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;

/

有一些方法,你可以使它更有效率。

在这种情况下,给定您要查找的值,可以清楚地删除任何NUMBER或DATE类型的列,这将减少查询的数量。也许甚至将它限制在类型为“%CHAR%”的列。

而不是每列一个查询,您可以像这样为每个表构建一个查询:

SELECT * FROM table1

WHERE column1 = 'value'

OR column2 = 'value'

OR column3 = 'value'

...

;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值