我正在使用HSQL,在我的存储过程中,我需要将“NEXT VALUE FOR MY_SEQUENCE”保存到变量中。我该怎么做?
CREATE PROCEDURE MYPROCEDURE(
IN PARAM1 NUMERIC)
MODIFIES SQL DATA
BEGIN ATOMIC
DECLARE NEXTID NUMERIC;
SELECT NEXT VALUE FOR MY_SEQUENCE INTO NEXTID FROM MY_TABLE;
INSERT INTO MY_TABLE(ID, COLUMN1) VALUES(NEXTID, PARAM1);
END;
问题: 变量NEXTID返回null。
答案 0 :(得分:0)
看起来问题出在SELECT ... INTO语句中。 MY_TABLE没有行或有多行,NEXTID变量未分配给。
您可以尝试使用最新版本的HSQLDB进行直接分配:
SET NEXTID = NEXT VALUE FOR MY_SEQUENCE
对于旧版本的HSQLDB,您需要一个只有一行的表,并从该表中选择以分配给序列。设置Oracle兼容模式时,可以使用DUAL表。否则,用一行创建自己的表。
SELECT NEXT VALUE FOR MY_SEQUENCE INTO NEXTID FROM DUAL;