HSQLDB调用存储过程导致权限错误

时间:2018-09-07 22:05:24

标签: stored-procedures hsqldb

我有一个基于Spring的Java Web应用程序,该应用程序在具有HSQLDB dbms后端的事务中插入大量记录。为了减少为要插入的记录生成主键的往返次数,我想到了创建一个存储过程的方法,该存储过程将生成主键,这些主键将在插入之前用作标识符。所以我用以下代码创建了一个存储过程:

CREATE PROCEDURE GET_GENERATED_PKS_SEQ_VALUES(
     IN NUMBEROFIDS INTEGER,
     OUT GENERATEDID NUMERIC ARRAY)
     BEGIN ATOMIC
      DECLARE GENID NUMERIC ARRAY;
      DECLARE COUNTER INTEGER DEFAULT 1;
      WHILE COUNTER <= NUMBEROFIDS DO
       SET GENID[COUNTER] = NEXT VALUE FOR GENERATE_PKS_SEQ;
      END WHILE;
      SET GENERATEDID = GENID;
     END;

已经有一个序列GENERATE_PKS_SEQ,用于为要插入的记录生成唯一标识符。该存储过程需要一个数字输入(NUMBEROFIDS),用于定义要生成的密钥数。

如果我执行此语句以在HSQLDB数据库管理器(Swing应用程序)中创建存储过程,则一切正常。也就是说,执行语句时没有错误。

创建存储过程后,我尝试访问它以测试输出。因此,基本上,我在HSQLDB数据库管理器中执行以下命令:

call GET_GENERATED_PKS_SEQ_VALUES(10);

所以我只想使用上述序列创建10个主键。该语句的结果是以下错误消息: enter image description here

我不知道为什么执行存储过程时出现权限错误。我使用相同的用户帐户创建了存储过程,该用户帐户使用上述参数调用了该过程。 HSQL DBMS版本是hsqldb-2.4.0。有人知道我的错误吗?怎么了?

1 个答案:

答案 0 :(得分:0)

由于该过程具有两个参数,因此必须使用两个参数来调用它。

对于测试,您可以先使用DECLARE TESTVAR NUMERIC ARRAY,然后再使用call GET_GENERATED_PKS_SEQ_VALUES(10, TESTVAR)

在Java程序中,第二个参数应为?,并应使用JDBC getArray()类的CallableStatement方法进行检索。