旧式外连接 (+) 不能与 ANSI 连接一起使用,Oracle 数据库错误代码 ORA-25156

Posted

技术标签:

【中文标题】旧式外连接 (+) 不能与 ANSI 连接一起使用,Oracle 数据库错误代码 ORA-25156【英文标题】:Old style outer join (+) cannot be used with ANSI joins, Oracle Database Error Code ORA-25156 【发布时间】:2020-12-13 17:27:15 【问题描述】:

为什么即使我将 hibernate.dialect 指定为 OracleDialect,我也会收到此错误。如果您推荐使用 oracle10gDialect 或 Oracle9iDialect 请解释一下,因为 Hibernate 在第一次连接到数据库时可以使用 JDBC 元数据找到方言。如果我错了,请纠正我。

【问题讨论】:

我认为没有任何 Oracle 方言允许 ANSI 连接语法和 Oracle 专有外部连接 (+) 语法在同一个查询中。这与 Hibernate 和您问题中的其他内容完全不同,我对此一无所知。 【参考方案1】:

我相信你的问题是找到正确的方言。但我相信这是配置的一部分。这不是编程问题,这是您用来操作或使用配置的配置策略。

    您可以使用基于环境的 dev、UAT、PROD 等多个配置文件将配置外部化。然后你的CICD 管道将根据部署的环境选择具有正确方言的正确配置文件。 或者您可以添加默认方言并覆盖基于的属性 部署应用的环境。

原因是应用程序是查找数据库的组件。

如果您想以编程方式执行此操作,请查看此帖子(我没有尝试过): Is there a way to detect SQL Dialect without knowing the database type?

另外请阅读驱动程序规范和 JPA 方言用法。一些数据库期望方言的确切版本能够支持全部功能。

【讨论】:

以上是关于旧式外连接 (+) 不能与 ANSI 连接一起使用,Oracle 数据库错误代码 ORA-25156的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ANSI sql 外连接表 [重复]

Oracle左连接右连接全外连接(+)号作用

旧式 JOIN 语法在 T-SQL 中是啥意思?

ADO 无法识别旧式 SQL 连接。不知道如何在此特定查询中使用新式语法

您是不是应该在 NHibernate 和 Sql Server 2008 中使用外连接获取?

我是不是将 Ansi OUTER JOIN 语法正确地转换为较旧的 Sybase (*=) 连接语法?