我怎样才能解决这个错误:不支持SQL92?(How can I fix this error : n

2019-06-27 17:54发布

我WIRTE在与甲骨文的Java和数据库连接代码。 我运行一些脚本,并得到这个error.My脚本工作,蟾蜍,但在我的项目不起作用

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; 
}

出现这种错误,因为{}括号。 我测试了。 当我删除括号不误。 但我需要他们,我该如何解决这个问题?

Answer 1:

这是所有关于{} 。 你不使用它们。 Ojdbc不会解析它。 使用不同的令牌,而不是他们。



Answer 2:

这可能是由于JDBC转义语法(参见JDBC 4.1规范的第13.4)。 JDBC驱动程序应该处理之间逃逸{}和翻译逃脱的标准功能,外连接等,以数据库特定的格式。

据我知道,如果在声明中体本身也发生了驱动程序应当只解析逃逸,并且当它不是在里面的语句文本(因为它是在你的例子)。 所以对我来说,这看起来像你的驱动程序的JDBC转义处理的错误。



Answer 3:

您可能能够解决这个问题通过以下的另一StackOverflow上职位的答案: 用JDBC Oracle数据库创建Java

摘要如下:

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

中间线是你仿佛失踪。 我想不出它,直到我发现这个职位。



Answer 4:

看来,一些替换的呼叫没有足够的论据。 从左边算起,先更换有两个参数。 第二个只有一个参数。 第三个有两个参数。 第四只有一个参数。 第五个(最后一个)有两个参数。 在Oracle的REPLACE函数至少需要两个参数。 我不能确定这是否是错误的原因,你还没有公布一个完整的说法,但我肯定会期望缺乏适当的参数来代替是一个问题。

分享和享受。



文章来源: How can I fix this error : non supported SQL92?