Oracle where exists 子句不适用于 SQL Plus

Posted

技术标签:

【中文标题】Oracle where exists 子句不适用于 SQL Plus【英文标题】:Oracle where exists clause not working on SQL Plus 【发布时间】:2017-11-14 15:07:47 【问题描述】:

我有一个带有“WHERE EXISTS()”子句的查询。 当我在 SQL Developer 上执行它时,它会返回行,但是当我在 SQL Plus 中执行它时它不会。

有人知道为什么会这样吗? 提前致谢。 问候, 若昂

【问题讨论】:

查询是什么,如果有表的描述和样本数据也有帮助。 在其他任何事情之前,只需检查您在 SQL Developer 中没有待处理的commint 在 99% 的情况下,结果证明一个工具连接到不同的数据库(或用户)然后另一个。 【参考方案1】:

如果查询将行返回到一个数据库会话(例如,由 SQL Developer 创建)并且不返回另一个(例如,由 SQL Plus 创建)中的任何行,则意味着这些会话是不同的。

区别可能是:

数据库已连接 已连接用户 当前架构 NLS 设置 FGAC 政策 等等……

正如胡安所说,未提交的数据也可能会影响这一点。

如果您查看 SQL Developer 中的某些行,我会说检查您是否可以将这些行访问到 SQL Plus(使用类似 select * from table where id = <id visible in SQL Developer> 的东西)。如果这返回一些行 - 请查看为什么它会被 SQL Plus 中的查询过滤。如果这不返回行,请查看您是连接到不同的数据源还是无权访问数据。

【讨论】:

感谢您的帮助。它是使用的模式。sql developer 上的会话正在使用一个模式,而 sqlplus 上的连接正在使用另一个模式完成。 -.-'

以上是关于Oracle where exists 子句不适用于 SQL Plus的主要内容,如果未能解决你的问题,请参考以下文章

将 IF EXISTS 移至 WHERE 子句

IF EXISTS 在 WHERE 子句中

Linq to Entities 添加 Where 子句以在另一个表中查找 EXISTS

Oracle的优化

EXISTS 和 IN 的区别

在 sum case 中使用 exists 子句(oracle)