如何在不使用Java的情况下在H2数据库中编写函数

aru*_*_kk 7 sql h2

这个问题引用了问题"如何使用H2数据库创建存储过程?" (继续相同的问题).

有没有办法在H2中编写函数而不使用Java代码?我的要求是在不使用Java代码的情况下将用SQL编写的函数转换为H2.我发现很多不同门户网站的例子使用Java代码做同样的事情.对你的帮助表示感谢.

关心阿伦

Tho*_*ler 16

目前,H2仅支持用Java或相关语言编写的函数(例如Groovy或Scala).不支持PL/SQL(Oracle)T-SQL(MS SQL Server,Sybase).


Luk*_*der 5

如果您的主要目标是在 H2 Java 用户定义函数中运行 SQL(或 SQLesque)语句,则jOOQ可以作为“PL/Java”实现的一个选项一个选项。当然,这仍然是一个 Java 解决方案。

可以在这篇博客文章中看到此类函数的示例:

http://blog.jooq.org/2011/11/04/use-jooq-inside-your-h2-database

public class Functions {
    public static int countBooks(Connection connection, Integer authorId) 
    throws SQLException {
        // Translate your T-SQL statements to jOOQ statements
        return DSL.using(connection, SQLDialect.H2)
                  .selectCount()
                  .from(BOOK)
                  .where(BOOK.AUTHOR_ID.eq(authorId))
                  .fetchOne(0, int.class);
    }
}
Run Code Online (Sandbox Code Playgroud)

将上述方法声明为 H2 的 ALIAS

CREATE ALIAS countBooks 
   FOR "org.example.Functions.countBooks";
Run Code Online (Sandbox Code Playgroud)

使用 SQL 中的函数

SELECT author.last_name, countBooks(author.id) 
FROM author
Run Code Online (Sandbox Code Playgroud)

当然,可以使用 H2 自己的 SQL 抽象JaQu采取类似的方法。我认为使用 JaQu 不会添加任何额外的依赖项。