2015-02-23 35 views
1

我正在尝试编写存储过程。 通过SQL浏览器创建一切顺利,但是当我将它保存在SQL文件并加载它通过虽然SqlTool失败HSQLDB中的存储过程。通过SQLTool创建


CREATE PROCEDURE SP_GETNEXTSEQUENCE(OUT out_new_seq_no DECIMAL, IN in_seq_id DECIMAL) 
MODIFIES SQL DATA 
    BEGIN ATOMIC 
    UPDATE SEQUENCE_GENERATOR SET seq_value=seq_value+1 where seq_id=in_seq_id; 
    select seq_value into out_new_seq_no from SEQUENCE_GENERATOR where seq_id=seq_id; 
    END; 
    .; 

我收到以下错误

Exception in thread "main" java.lang.Error: Error: could not match input 
    at org.hsqldb.cmdline.sqltool.SqlFileScanner.zzScanError(Unknown Source) 
    at org.hsqldb.cmdline.sqltool.SqlFileScanner.yylex(Unknown Source) 

调用发出 SqlTool.objectMain(sqlToolParams);

其中

String [] sqlToolParams = {"--inlineRc", "URL="+"jdbc:hsqldb:mem:TestDB", SCHEMAPATH}; 

我需要纠正的语法帮助。

我试图从http://hsqldb.org/doc/2.0/util-guide/sqltool-chapt.html#sqltool_raw-sect

得到线索,但好像我的了解还不够充分

问题补充 - 是否SQL文件需要是任何特定的编码

回答

0

更新的存储过程

的存储过程的正确定义是这样的


CREATE PROCEDURE SP_GETNEXTSEQUENCE(OUT pno_new_id INTEGER, IN pni_seq_id INTEGER) 
    MODIFIES SQL DATA 
    BEGIN ATOMIC  
     UPDATE SEQUENCE_GENERATOR SET seq_value=seq_value+1 where seq_id=pni_seq_id; 
     SET pno_new_id = (select seq_value from SEQUENCE_GENERATOR where seq_id=pni_seq_id);  
    END 
.; 

一些挖掘后,发现Select语句必须得到纠正。 虽然SqlTool不接受直接选择

写入存储的特效和功能,请通过这个 http://hsqldb.org/doc/guide/sqlroutines-chapt.html#src_psm_statements

之前