如何用Oracle查询来获取列名称?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (42)

我有一个MySQL查询来从这样的表中获取列:

String sqlStr="select column_name 
from information_schema.COLUMNS 
where table_name='users' 
and table_schema='"+_db+"' 
and column_name not in ('password','version','id')"

如何在Oracle 11g数据库中更改上述查询?我需要将列名称作为表'用户'的结果集,排除某些列,指定模式。现在我在新的表空间中有所有的表,那么我需要指定表空间名来代替模式名吗?

还有一个通用的HQL吗?在我的新Oracle数据库(我是Oracle的新手)中,我只有表空间名称,所以与模式名称相同(逻辑上?)

提问于
用户回答回答于

Oracle的等价物information_schema.COLUMNSUSER_TAB_COLS为拥有当前用户,表ALL_TAB_COLSDBA_TAB_COLS为所有用户拥有的表。

表空间不等同于模式,你也不必提供表空间名称。

如果你想要查询特定用户所拥有的表ALL_TAB_COLSDBA_TAB_COLS列的列,提供模式/用户名将很有用。在你的情况下,我可以想象这个查询看起来像这样:

String sqlStr= "
SELECT column_name
FROM   all_tab_cols
WHERE  table_name = 'users'
       AND owner = ' || +_db+ || '
       AND column_name NOT IN ( 'password', 'version', 'id' ) 
"

请注意,采用这种方法可能会导致SQL注入。

用户回答回答于

以下查询在Oracle数据库中适用于我。

select COLUMN_NAME from ALL_TAB_COLUMNS where TABLE_NAME='MyTableName';

扫码关注云+社区