代码之家  ›  专栏  ›  技术社区  ›  Acewin

HSQLDB中的存储过程。通过SQLTool创建

  •  1
  • Acewin  · 技术社区  · 10 年前

    我正在尝试编写存储过程。 通过SQL浏览器创建它很好,但当我将它保存在SQL文件中并通过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文件是否需要任何特定的编码

    1 回复  |  直到 9 年前
        1
  •  0
  •   Acewin    10 年前

    存储过程的更新

    存储过程的正确定义如下


    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不接受直接选择

    在编写存储的proc和函数之前,请仔细阅读 http://hsqldb.org/doc/guide/sqlroutines-chapt.html#src_psm_statements