2

当我将 Oracle 函数迁移到 HSQLDB 时,我需要为 HSQLDB 翻译“选择为”。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 行,0.000 秒] [错误代码:-5608,SQL 状态:42608] 声明中错误或缺少数据影响子句:在语句中读取 SQL

从 HSQLDB 2.2 的发行说明中,它说他们已经支持“选择进入”,但我没有找到方法。

任何人都知道如何在 HSQLDB 2.2.9 中做到这一点?

4

1 回答 1

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

于 2012-11-19T12:05:52.900 回答