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

Posted

技术标签:

【中文标题】如何修复此错误:不支持 SQL92?【英文标题】:How can I fix this error : non supported SQL92? 【发布时间】:2012-09-03 08:44:38 【问题描述】:

我在 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; 

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

【问题讨论】:

显示您的查询。您的查询似乎不正确。 我的查询可以在 toad 中运行,但不能在我的 netbeans 中运行 如果您想获得帮助,请考虑两件事。 1)url include " 2 ":仅将其作为错误消息发布是不够的。发布整个错误消息。 2)您还应该在调用stmt.executeQuery(url)之前发布url变量的值。 @Ersin,基于它在 TOAD 中工作的事实,没有人能够提供帮助。发布语句字符串。 () 替换 并尝试一下。 【参考方案1】:

这一切都与 有关。你不使用它们。 Ojdbc 不会解析它。使用不同的令牌代替它们。

【讨论】:

我应该使用哪个令牌?当我使用 jdbc 调用过程时,我遇到了同样的问题 你可以使用任何你想要的东西。 F.E. 使用 xx ,先替换再替换为反向【参考方案2】:

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

据我所知,驱动程序仅应在转义出现在语句主体本身中时解析转义,而不是在语句中的文本内部时(如您的示例中所示)。所以对我来说,这看起来像是驱动程序的 JDBC 转义处理中的一个错误。

【讨论】:

【参考方案3】:

您可以通过遵循另一个 *** 帖子的答案来解决此问题: Create Java on Oracle database with JDBC

总结如下:

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

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

【讨论】:

【参考方案4】:

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

分享和享受。

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于如何修复此错误:不支持 SQL92?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复“此路线不支持 GET 方法。支持的方法:POST。'?

Java:Sqlexception:位置不支持的 SQL92 令牌:178

如何修复此路由不支持 GET 方法

如何修复不再支持 AWS Lambda nodejs8.10 错误

如何修复 Angular Firestore 中不支持的字段值错误?

如何修复错误“更新 Maven 项目”。不支持的 IClasspathEntry kind=4?