Oracle的sql查询没有办法屏蔽关键字么?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle的sql查询没有办法屏蔽关键字么?相关的知识,希望对你有一定的参考价值。
Oracle数据库,有一张表的表名是User,不知道那人是怎么创建出来的,坑爹的是我无法用SQL查询User表的数据,我给表名加[]、''、""、··等等。都没用,求大神指教
加上SCHEMA就能访问的,用下面的sql查询一下 这个表属于哪个SCHEMAselect dt.OWNER,dt.TABLE_NAME
from dba_tables DT
where dt.TABLE_NAME = \'User\'
然后访问的时候用 owner.User 就能访问了!追问
用大写 select * from IMBS.USER 试试!没有道理 啊!
或者你按照下图 那样查询数据,看看后来的出来的SQL语句是什么?!
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 查询中使用的表和列? [复制]