这个问题引用了问题"如何使用H2数据库创建存储过程?" (继续相同的问题).
有没有办法在H2中编写函数而不使用Java代码?我的要求是在不使用Java代码的情况下将用SQL编写的函数转换为H2.我发现很多不同门户网站的例子使用Java代码做同样的事情.对你的帮助表示感谢.
关心阿伦
如果您的主要目标是在 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 不会添加任何额外的依赖项。