比如,有一个数据库,有table1,table2,table3................等很多表,我要查哪个表有一个字段包含着“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,就把表名和字段名记录下来。
你会回来感谢我的