Использование SELECT INTO в подпрограммах HSQL 2.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] неверное или отсутствующее предложение о влиянии данных в объявлении: READS SQL в выражении

В примечании к выпуску HSQLDB 2.2 говорится, что они уже поддерживают «выбрать в», но я не нашел способа.

Кто-нибудь знает, как это сделать в HSQLDB 2.2.9?


person villim    schedule 19.11.2012    source источник


Ответы (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 ....

В последние месяцы было введено больше улучшений и исправлений. Лучше использовать последнюю банку моментальных снимков (и версию 2.3.0, когда она будет выпущена) вместо 2.2.9.

http://www.hsqldb.org/repos/org/hsqldb/hsqldb/SNAPSHOT/

Каталог снимков — это репозиторий Maven.

person fredt    schedule 19.11.2012