【问题标题】:Stored Procedure in HSQLDB. Creation through SQLToolHSQLDB 中的存储过程。通过 SQLTool 创建
【发布时间】:2015-04-25 09:09:21
【问题描述】:

我正在尝试编写一个存储过程。 通过 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文件是否需要任何特定的编码

【问题讨论】:

    标签: java sql hsqldb in-memory-database


    【解决方案1】:

    更新存储过程

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


    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

    【讨论】:

      猜你喜欢
      • 2018-07-27
      • 2017-09-15
      • 2015-04-26
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 2014-09-14
      • 2020-08-07
      • 1970-01-01
      相关资源
      最近更新 更多