当我将Oracle Function迁移到HSQLDB时,我需要为HSQLDB翻译“Select into”。 Oracle脚本可能如下所示:
CREATE FUNCTION getId()
RETURN NUMBER IS
temp_id NUMBER;
...
BEGIN
....
SELECT id id INTO temp_id from ( select id form ..... );
在HSQLDB 2.0.0中,我可以执行以下操作:
CREATE FUNCTION getId()
RETURNS BIGINT
BEGIN ATOMIC
DECLARE temp_id BIGINT;
....
SET temp_id = SELECT id id FROM ....
但是,它不再适用于HSQLDB 2.2.9。错误消息是:
[CREATE - 0 row(s),0.000 secs] [错误代码:-5608,SQL状态:42608] 声明中的错误或缺少数据影响子句:READS SQL in 声明
从HSQLDB 2.2的发行说明中,它说他们已经支持“select into”,但我没有找到方法。
任何人都知道如何在HSQLDB 2.2.9中做到这一点?
答案 0 :(得分:1)
在2.2.x系列中,有更严格的数据访问检查。必须声明读取表数据的例程。
CREATE FUNCTION getId()
RETURNS BIGINT READS SQL DATA
BEGIN ATOMIC
DECLARE temp_id BIGINT;
....
SET temp_id = SELECT id id FROM ....
最近几个月推出了更多的补充和修复。最好使用最新的快照jar(发布时版本为2.3.0)而不是2.2.9。
http://www.hsqldb.org/repos/org/hsqldb/hsqldb/SNAPSHOT/
快照目录是Maven存储库。