我有一个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')"
Run Code Online (Sandbox Code Playgroud)
如何在Oracle 11g数据库中更改上述查询?我需要将列名称作为表'用户'的结果集,排除某些列,指定模式.现在我在新的表空间中有所有表,所以我是否指定了表空间名称来代替模式名称?
还有一个通用的HQL吗?在我的新Oracle数据库(我是Oracle新手)中,我只有表空间名称,所以它等同于模式名称(逻辑上?)
Sat*_*hat 157
Oracle的等价物information_schema.COLUMNS是USER_TAB_COLS为拥有当前用户,表ALL_TAB_COLS或DBA_TAB_COLS为所有用户拥有的表.
表空间不等同于模式,您也不必提供表空间名称.
如果要查询特定用户所拥有的表ALL_TAB_COLS或DBA_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' )"
Run Code Online (Sandbox Code Playgroud)
请注意,使用此方法可能会导致SQL注入风险.
编辑:大写表名和列名,因为它们在Oracle中通常是大写的; 如果用双引号创建它们,它们只是低级或混合大小写.
Kar*_*N G 94
以下查询在Oracle数据库中对我有用.
select COLUMN_NAME from ALL_TAB_COLUMNS where TABLE_NAME='MyTableName';
Run Code Online (Sandbox Code Playgroud)
Ars*_*ikh 39
在oracle中你可以使用
desc users
Run Code Online (Sandbox Code Playgroud)
显示包含在users表中的所有列
您可以尝试这样:(它适用于11g,它返回表中的所有列名,这里test_tbl是表名,user_tab_columns是用户允许的表的列)
select COLUMN_NAME from user_tab_columns
where table_name='test_tbl';
Run Code Online (Sandbox Code Playgroud)
小智 6
关键是在 Toad 中你必须将表名大写,如下所示:
select *
FROM all_tab_columns
where table_name like 'IDECLARATION';
Run Code Online (Sandbox Code Playgroud)