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 では機能しなくなりました。エラーメッセージは次のとおりです。

[作成 - 0 行、0.000 秒] [エラー コード: -5608、SQL 状態: 42608] 宣言のデータ影響句が間違っているか欠落しています: ステートメントの READS SQL

HSQLDB 2.2 のリリース ノートによると、「select into」は既にサポートされているとのことですが、方法がわかりませんでした。

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 ....

ここ数か月で、さらに多くの機能強化と修正が導入されました。2.2.9 ではなく、最新のスナップショット jar (およびリリース時のバージョン 2.3.0) を使用することをお勧めします。

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

スナップショット ディレクトリは Maven リポジトリです。

于 2012-11-19T12:05:52.900 に答える