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

时间:2012-09-03 08:44:38

标签: java oracle netbeans jdbc

我在使用oracle的java和数据库连接中编写代码。我运行一些脚本并得到此错误。我的脚本在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; 
}

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

5 个答案:

答案 0 :(得分:11)

全部是关于{}。你不使用它们。 Ojdbc不会解析它。使用不同的令牌代替它们。

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

您可以通过关注另一个StackOverflow帖子的答案来解决这个问题: Create Java on Oracle database with JDBC

摘要是:

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

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

答案 3 :(得分:0)

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

分享并享受。

答案 4 :(得分:0)

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