繁体   English   中英

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

[英]How can I fix this error : non supported SQL92?

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

网址包括。

.
.
.
.
    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转义处理中的错误。

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

摘要是:

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

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

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

分享和享受。

在脚本中将CHR(123)||'4'||CHR(125)替换为'{4}'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM