在HSQL 2.2例程中使用SELECT INTO

时间:2012-11-19 10:23:23

标签: function hsqldb procedures routines

当我将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中做到这一点?

1 个答案:

答案 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存储库。