Oracle的sql查询​没有办法屏蔽关键字么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle的sql查询​没有办法屏蔽关键字么?相关的知识,希望对你有一定的参考价值。

Oracle数据库,有一张表的表名是User,不知道那人是怎么创建出来的,坑爹的是我无法用SQL查询User表的数据,我给表名加[]、''、""、··等等。都没用,求大神指教

加上SCHEMA就能访问的,用下面的sql查询一下 这个表属于哪个SCHEMA
select dt.OWNER,dt.TABLE_NAME
from dba_tables DT
where dt.TABLE_NAME = \'User\'

然后访问的时候用 owner.User 就能访问了!追问

追答

用大写  select * from IMBS.USER 试试!没有道理 啊!

或者你按照下图 那样查询数据,看看后来的出来的SQL语句是什么?!

参考技术A create table "user" ( tname varchar2(100));
select * from "user" ; 这样肯定是可以的。
你能不能把错误信息贴出来追问

追答

select * from "user" 用这个就可以了啊

追问

试过了,没用

参考技术B 没权限而已, 表不是你这个用户下创建的,并且没有你赋权限追问

你可能没懂我意思,我查询的时候报错“表名无效”,因为User是关键字,我不知道怎么屏蔽它(比如SQL server可以在关键字外面加“[ ]”,在Oracle中要怎么屏蔽关键字呢?)

如何屏蔽在 h2 上运行的 MySQL 查询中的“USE INDEX”

【中文标题】如何屏蔽在 h2 上运行的 MySQL 查询中的“USE INDEX”【英文标题】:how to mask out "USE INDEX" in MySQL query running on h2 【发布时间】:2016-04-23 21:26:08 【问题描述】:

我正在使用本地 h2 为 java 应用程序测试 MySQL 查询。问题是 h2 在 MySQL 查询中不支持“USE INDEX”(索引提示)。它报告“SQL 语句中的语法错误”。有没有办法在 h2 中屏蔽 USE INDEX 来运行此查询?

我尝试使用别名将 USE INDEX 部分替换为空字符串:

CREATE ALIAS `USE INDEX` FOR "<java-function-that-returns-empty-string>"

但它不起作用,即仍然报告“SQL 语句中的语法错误”。我怀疑这是因为 'USE INDEX' 是两个词,别名不支持?但我不确定。有什么建议么?谢谢。

【问题讨论】:

你为什么在 h2 中使用为 mysql 编写的查询? 我们的生产环境。在mysql中,但单元测试使用的是h2。我无法控制用于单元测试的数据库引擎,也无法控制生产环境。顺便说一句,我们在单元测试中使用“migrations.sql”来设置 h2。那就是我尝试“创建别名”的地方。 ORM 工具通常解决这个问题的方法是为每个目标数据库使用不同的方言 感谢@ElliottFrisch。我们的代码库虽然没有使用 ORM。最后,我决定子类化数据访问接口,并在删除“USE INDEX”的情况下覆盖查询。子类仅用于单元测试。现在它似乎工作了。 【参考方案1】:

H2 目前不支持非标准的 MySQL“USE INDEX”语法。所以你的 SQL 对 H2 无效。

但我目前正在将其添加到 H2。

【讨论】:

感谢您在 h2 上所做的工作。请不要忘记 FORCE INDEX 和 USE INDEX。 =) 我个人所需要的只是让语法被认为是合法的,这样我的测试套件就会通过。 太棒了!是否打开了拉取请求?我们可以看看吗? 看起来他忘记了,关于 FORCE INDEX,它不起作用(糟糕的 SQL 语法),当你想使用 H2 自动测试为 MySQL 编写的代码时,这有点问题:(【参考方案2】:

我也遇到了同样的问题,终于找到了一个简单优雅的解决方案:

select 
count(*)  from category t /*! use index(primary) */

这种注释只能由 MySQL 解释,H2 不能解释。

【讨论】:

以上是关于Oracle的sql查询​没有办法屏蔽关键字么?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法列出 ORACLE 查询中使用的表和列? [复制]

Oracle 11 SQL:有没有办法将 1 行拆分为 x 行

VirtualBox-5.1.22​无法挂载u盘解决办法

用于 oracle 子查询的 Pyspark sql

在提交之前更改 Oracle SQL 查询文本 [关闭]

oracle数据库约200W数据查询非常慢,查询需要10几秒,经常查询超时,这个正常吗?有没有啥好的办法解决