请问如何查询一个oracle数据库中,是否有某个表的某一列包含某个值

比如,有一个数据库,有table1,table2,table3................等很多表,我要查哪个表有一个字段包含着“aaaaabbbbcccc”?怎么办

select TABLE_NAME from dba_tab_columns where s.column_name='AAAAABBBBCCCC';
如果上面语句执行没有结果或者失败。则执行
select TABLE_NAME from user_tab_columns where s.column_name='AAAAABBBBCCCC';

另外注意AAAAABBBBCCCC这里一定要大写。追问

第二个成功了,但是我需要的不是某个表的列名是AAAAABBBBCCCC

而是要某个字段的具体值是AAAAABBBBCCCC

很接近了,再麻烦你以下,谢谢

追答

这样啊,那我告诉你,这个你真查不了,因为某个字段含有的内容,不会存放在数据字典中的。

像你这个问题只能先生成一个脚本,去批量查询了。因为你都不知道是哪个表,哪个字段。只能批量查询来过滤。过滤的时候可以根据你要查询的值是字符类型还是数字类型来过滤掉某些字段。当然如果你能肯定有AAAAABBBBCCCC这个值,那么你还能把字段长度小于它的字段过滤掉。

oracle中没有现成的东西供你这种查询的。

追问

那退而求次,我想查某个具体的表,是否含有这个值,行不

追答

可以,不过你这个表的数据量太大的话,很慢的。
你比如表明是t,有字段A,B,C,D
你可以写select * from t where a='AAAAABBBBCCCC
' or b='AAAAABBBBCCCC
' or c='AAAAABBBBCCCC
' or d='AAAAABBBBCCCC
';
当然你如果能判定某个字段肯定不会存在这样的值,你可以直接不要这个字段。

另外你可以查询user_tab_column这个表,运用||拼接字符串的方式把所有的表和字段拼成一个脚本。直接执行,全自动话。

追问

就是因为这个表的全部字段不规则,我不可能每个字段都像这样a='AAAAABBBBCCCC
' or b='AAAAABBBBCCCC
' or c='AAAAABBBBCCCC
' or d='AAAAABBBBCCCC
想有没有一种办法,能自动生成某个字段的列名,去判断它有没有“AAAAABBBBCCCC”

追答

select 'select * from ' ||table_name ||' where ' ||column_name||'=''AAAAABBBBCCCCC'';' from user_tab_columns;
执行结果如下
select * from A1624 where ROWCHARNUMS='AAAAABBBBCCCCC';
select * from A1624 where XOFFSET='AAAAABBBBCCCCC';
select * from A1624 where YOFFSET='AAAAABBBBCCCCC';
select * from A1624 where EQUIPOBJID='AAAAABBBBCCCCC';
select * from A1624 where DEVELEFLOWER='AAAAABBBBCCCCC';
select * from A1624 where EPGIS_INC_ID='AAAAABBBBCCCCC';
把上面结果黏贴出来到一个sql窗口,执行,
有结果的就显示出来了

这是给你的思路,如果你还想在自动化下,可以写存储过程
比如如果结果如果等于0,就舍弃,如果不等于0,就把表名和字段名记录下来。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-03-16
1、看用户的表的信息如同marliuang所说,不再赘述。当然了你用a登录后也可以用命令(selecttnamefromtab;)查看。2、显示乱码是因为oracle中的回收站(recyclebin)的缘故,为了防止用户误删除,oracle引入了回收站这一概念,你可以使用命令:purgerecyclebin;(用户a登录)或者purgedbarecyclebin;(dba用户登录)这样就看不到这个表了。当然了你在删除表的时候直接写“droptabletablenamepurge;”也是一样的。
第2个回答  2019-03-05


第3个回答  2019-04-03

  你会回来感谢我的

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网