0

h2 データベースに裏打ちされた会計システムを作成しています。アカウントのツリーは ACCOUNTS テーブルに格納され、PARENT_ID 列にツリー内のリンクが格納されます。

ツリー内の特定のノードへのパスを取得するために、次のストアド プロシージャがあります。

public static Object[] getAncestorPKs(Long id)

その仕事は、指定されたノードとツリーのルートの間の PARENT_ID 値である整数の配列を生成することです。次のように、ANCESTOR_PKS という名前でプロシージャをデータベースに登録します。

CREATE ALIAS IF NOT EXISTS ANCESTOR_PKS FOR "xxx.yyy.zzz.getAncestorPKs"

私の問題は、SQLException をトリガーせずに使用する方法が見つからないように見えることです! 次のように使用する必要があります。

SELECT ID FROM ACCOUNTS WHERE [...] AND ID IN ANCESTOR_PKS(5) [for example]

次のエラーが表示されます。

Syntax error in SQL statement "SELECT ID FROM ACCOUNTS WHERE ID IN ANCESTOR_PKS[*](5) "; expected "("

しかし、ANCESTOR_PKS の後に括弧があります!!! ここで何が起こっているのですか?ストアド プロシージャの結果で IN を使用する方法はありますか? 調べて調べたのですが、IN の使用例はすべてリテラル配列であり、ストアド プロシージャの戻り値である配列の使用方法を示すことは誰も考えていないようです。

ヘルプ???

4

1 に答える 1

0

私は h2 に慣れていませんが、このページには、配列の周りに () を配置する必要があると書かれています。

SELECT ID FROM ACCOUNTS WHERE ID IN (ANCESTOR_PKS(5))

たぶん、サブセレクトを追加する必要さえあります

SELECT ID FROM ACCOUNTS WHERE ID IN (SELECT ANCESTOR_PKS(5))
于 2012-07-25T22:36:22.123 に答える