如何修复此错误:不支持 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
如何修复不再支持 AWS Lambda nodejs8.10 错误