如何使用sql查询获取特定表的列名

时间:2017-02-08 09:02:07

标签: sql oracle

在获取特定表的列名时,我遇到了一个问题

我写了以下查询

SELECT column_name 
FROM all_tab_cols 
WHERE  Table_name like 'tabelname';

但是表中发生的事情有54列,但是当我运行代码时,224列会出现。我不知道为什么。

2 个答案:

答案 0 :(得分:3)

假设是Oracle,而不是SQL Server。

all_tabl_cols显示当前用户访问的所有表中的列,而不是当前用户拥有的列。如果同一个表存在于不同的模式中,则将显示所有这些表。

如果你没有使用通配符模式,那么LIKE运算符是没有意义的。使用Table_name = 'tabelname'代替它会更干净。

Oracle将表名存储在UPPERCASE中(除非您使用那些可怕的双引号创建它们)。字符串比较在Oracle中区分大小写。因此,您必须将列table_name的内容与大写名称进行比较 -

您可以使用user_tab_cols代替all_tab_cols

SELECT column_name 
FROM user_tab_cols 
WHERE table_name = 'THE_TABLE';

或者您需要指定所有者:

SELECT column_name 
FROM all_tab_cols 
WHERE table_name = 'THE_TABLE'
  AND owner = user;

答案 1 :(得分:0)

SELECT column_name 来自all_tab_cols 表格='验证' AND owner =' APPDB'       AND column_name NOT IN('密码','版本',' id')