当前位置: 首页 > 知识库问答 >
问题:

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

蒯宇定
2023-03-14

我试图写一个存储过程。通过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-门派

但似乎我的理解还不够充分

新增问题——SQL文件是否需要任何特定的编码

共有1个答案

吕子真
2023-03-14

更新存储的进程

存储过程的正确定义如下

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

 类似资料:
  • 我试图在我的内存Hsqldb数据库中设置一个存储过程,用于测试目的。我正在使用的存储过程是在MySql中开发的,所以我想用HSqlDb来设置它,以适应我的测试包 我试图创建一个简化版本的程序,但还没有乐趣。 程序是 我在运行测试时遇到的错误如下

  • 是否可以在HSQLDB中创建递归存储过程? 我编写了以下一个来更新一个记录,并递归地更新所有父记录: 但我得到了以下错误: 在HyperSQL用户指南中,我找到了一些信息(请参阅HyperSQL用户指南中的递归例程),但它似乎只支持函数。 提前感谢您的支持。

  • 是否可以在HSQLDB存储过程结束之前返回? 我试过: 这不能编译。用或代替。

  • 在HSQLDB中,我试图创建一个存储过程,在更新数据库后执行提交。 类似:创建过程MY_PROC(p_id整数)修改SQL数据开始原子更新提交结束 创建此过程时,通过调用JDBC Statement.execute()方法,我得到了一个错误:SQLSynTaxErrorExctive:意外令牌:COMMIT必需:END 如果没有COMMIT语句,则过程将被正确编译。 知道我做错了什么吗?

  • MySQL 存储过程是一些 SQL 语句的集合,比如有时候我们可能需要一大串的 SQL 语句,或者说在编写 SQL 语句的过程中需要设置一些变量的值,这个时候我们就完全有必要编写一个存储过程。 编写存储过程并不是件简单的事情,但是使用存储过程可以简化操作,且减少冗余的操作步骤,同时,还可以减少操作过程中的失误,提高效率,因此应该尽可能的学会使用存储过程。 下面主要介绍如何创建存储过程。 可以使用

  • 问题内容: 我试图在postgres 9.3上使用sql调用函数内的函数。 这个问题与我的另一篇文章有关。 我写了下面的函数。到目前为止,我还没有合并任何类型的save-output(COPY)语句,因此我试图通过创建嵌套函数print-out函数来解决此问题。 以上功能有效。 尝试创建嵌套函数。 调用嵌套函数。 输出 上面给出了这个。但是,当在print_out()中将arg1,arg2替换为’