如何修复此错误:不支持SQL92?

我在java和Oracle的数据库连接中编写代码。 我运行一些脚本并得到此错误。我的脚本在toad中工作但在我的项目中不起作用

url包括。

. . . . DECODE (REF.target_type_code, '1', wf.workflow_name, '20', reqtyp.request_type_name, '6', prj1.project_name, '59', trootinfo1.NAME, '55', DECODE (document.checked_out_by, NULL, REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (knta_i18n_resource.get ('DMS_REFERENCE_DETAIL_CHECKED_OUT.TXT' ), knta_i18n_format_utils.format_date (document.checked_in_date, 3 ) ) ), document.version_number ) ), '{4}' ) ) ) reference_detail, . . . 

 try { stmt = connection.createStatement(); rset = stmt.executeQuery(url) ; } catch (Exception e) { error= e.getLocalizedMessage() ; return 4; } 

由于{}括号,会发生此错误。 我测试一下。 当我删除括号时不要错误。 但我需要它们,我该如何解决这个问题呢?

这完全是关于'{‘和’}’。 你不要使用它们。 ojdbc不解析它。 使用不同的令牌代替它们。

这可能是由于JDBC Escape语法(参见JDBC 4.1规范的第13.4节)。 JDBC驱动程序应该处理{}之间的转义,并将转义的标准函数,外部联接等转换为数据库特定的格式。

据我所知,驱动程序应该只解析转义,如果它出现在语句体本身,而不是它在语句中的文本内部(就像在你的例子中)。 所以对我来说,这看起来像是驱动程序的JDBC转义处理中的错误。

您可以通过遵循另一个StackOverflowpost的答案来解决这个问题: 使用JDBC在Oracle数据库上创建Java

摘要是:

 CallableStatement stat = conn.prepareCall(sql); stat.setEscapeProcessing(false); stat.execute(); 

中间线是你似乎缺少的。 直到找到那个post我才弄明白。

似乎有几个REPLACE调用没有足够的参数。 从左边开始计数,第一个REPLACE有两个参数。 第二个只有一个参数。 第三个有两个论点。 第四个只有一个论点。 第五个(最后一个)有两个参数。 在Oracle中, REPLACE函数至少需要两个参数。 我无法确定这是否是错误的原因,因为您没有发布完整的声明,但我当然希望缺少适当的REPLACE参数是一个问题。

分享和享受。