我有一个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数据库中更改上述查询?我需要将列名作为表"users"的结果集,不包括特定的列,并指定一个模式.现在我的新表空间中有所有的表,所以我要指定表空间名来代替模式名吗?

还有通用的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注入的风险.

EDIT:大写的表名和列名,因为它们在Oracle中通常是大写的;如果在它们周围加上双引号,则它们只是小写或混合大写.

Sql相关问答推荐

IS True操作员

SQL -连接两个表的次数与第一个表中匹配的次数相同

在postgresql中使用来自另一个字段的日期名称作为JSONB查询中的关键字

如何在PostgreSQL中同时为id s列表执行多个update语句?'

Group By子句返回太多行

如何连接第二个表并将其内容输入到第一个表的单个字段中?

Postgres trunc_date删除一个月

删除MariaDB数据库中的JSON数据

如何在SQL中更新Json字符串

冲突查询的UPDATE时违反非空约束

我可以在SQLite3中使用BLOB作为主键吗?

如何简化此PostgreSQL查询以计算平均值?

在SQL查询中查找客户端的最短日期比较列和多行

如何根据 Google BigQuery 中的特定列值连接一列的 N 行?

如何使用 join 和 where 子句从另一表中仅删除一个表中的值

比使用NOT EXISTS更高效的SQL删除方法是什么?

当该日期的至少两条记录具有相同的持续时间或至少一条记录的持续时间为 0 时,如何标记该日期的所有记录

joins 组合多个重复数据删除策略

运算符不存在:integer = bigint[]

PostgresQL-根据另一列找到 3 个最低值