2017-10-18 169 views
0

我正在看一些旧的代码,并遇到运行其中一个单元测试的问题。HSQLDB:用户缺少权限或对象未找到错误

的代码是:

String sql = "insert into customers" + 
      "(name, age, date, id) " + 
      " values " + 
      " (?, ?, ?, CUSTOMERS_SEQ.NEXTVAL)"; 

     if (LOG.isDebugEnabled()) LOG.debug("doInsert: SQL query = " + sql); 

     int count; 
     PreparedStatement pStmt = null; 
     try { 
      // insert! 
      pStmt = conn.prepareStatement(sql); // fails over here 
      //... do other stuff 
     } 
     //...more things 

但是,尝试准备它抛出错误

用户缺少特权或找不到对象的语句时:CUSTOMERS_SEQ.NEXTVAL。

我正在阅读有关错误本身,似乎无法找到任何东西。奇怪的是,当我在本地运行查询 Select CUSTOMERS_SEQ.NEXTVAL from CUSTOMERS它工作正常。

任何和所有的帮助将不胜感激。

回答

2

表达式CUSTOMERS_SEQ.NEXTVAL不是SQL标准表达式,而是Oracle语法之一。您需要启用与下面的语句与Oracle语法兼容:

SET DATABASE SQL SYNTAX ORA TRUE 

或者包括连接URL中sql.syntax_ora=true

启用兼容模式,INSERT语句应该工作

(它与HSQLDB 2.4.0工作)的等效SQL标准表达式为:

NEXT VALUE FOR CUSTOMERS_SEQ 
+0

这是非常有帮助!谢谢! – LivingRobot

相关问题