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 の使用例はすべてリテラル配列であり、ストアド プロシージャの戻り値である配列の使用方法を示すことは誰も考えていないようです。
ヘルプ???