在获取特定表的列名时,我遇到了一个问题
我写了以下查询
SELECT column_name
FROM all_tab_cols
WHERE Table_name like 'tabelname';
但是表中发生的事情有54列,但是当我运行代码时,224列会出现。我不知道为什么。
答案 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')