数据库 plsql 怎么在某个表中所有列中查找某个字段?因为我不知道他在哪个列

如题所述

第1个回答  推荐于2016-07-15
你可以这么试试:

假设,表名:XXX , 字符类型列, 要查的内容为 :YYY

select 'SELECT * FROM XXX WHERE '||COLUMN_NAME|| ' LIKE ''%YYY%'';' from cols where datA_type = 'VARCHAR2' AND TABLE_NAME = 'XXX'

将这个查询的结果,拷贝出来,再执行查询。追问

要查的内容为 :YYY是某一列的数据中的一个,不是列名

追答

我给你的例子,就是这个意思啊

追问

你能解释一下吗?我刚学sql语句

我现在知道表中有一列的数据中有223344这个数,我该怎么把这个数所在的列找出来?

追答

是数字还是字符,如果是字符,要不要like

追问

是数字

追答

select 'SELECT * FROM XXX WHERE '||COLUMN_NAME|| ' = 223344;' from cols where datA_type = 'NUMBER' AND TABLE_NAME = 'XXX'

数据类型那儿可能不一定是NUMBER,你自己看看。

追问

确实是字符串。另外有个问题,你这里的cols是什么作用?能这样写吗?大写的COLUMN两边加竖线表示什么意思?

追答

|| 是oracle 中 字符 拼接的 , 和sqlserver 的 字符 + 一样

cols 是当前用户的 表字段 视图。

我这是给你拼了一个 查询当前表的各个字段 的 查询 语句。

你执行一下,就知道什么意思了 !

追问

结果出来是 'SELECT * FROM XXX WHERE '| 这段字符

追答

你到底是字符列,还是数字列?

如果是数字列的话,用第二个语法,出来的是:

SELECT * FROM XXX WHERE 字段名1 = 223344;
SELECT * FROM XXX WHERE 字段名2 = 223344;

SELECT * FROM XXX WHERE 字段名n = 223344;

多个这样的sql语句,你用这个一查,就知道哪个列有数据了啊

追问

奇怪,我输入select data_type from cols where table_name='表名' 居然没结果出来

是字符列

追答

一般来说:表名,应该大写

select 'SELECT * FROM XXX WHERE '||COLUMN_NAME|| ' LIKE ''%YYY%'';' from cols where datA_type = 'VARCHAR2' AND TABLE_NAME = 'XXX'

或者:

select 'SELECT * FROM XXX WHERE '||COLUMN_NAME|| ' = ''YYY'';' from cols where datA_type = 'VARCHAR2' AND TABLE_NAME = 'XXX'

本回答被提问者采纳
相似回答