这个问题是参考问题“如何使用 H2 数据库创建存储过程?” (同一问题的继续)。
有没有办法在不使用 Java 代码的情况下在 H2 中编写函数?我的要求是将用 SQL 编写的函数翻译成 H2 而不使用 Java 代码。我在不同的门户网站上发现了很多使用 Java 代码做同样事情的例子。对你的帮助表示感谢。
问候阿伦
这个问题是参考问题“如何使用 H2 数据库创建存储过程?” (同一问题的继续)。
有没有办法在不使用 Java 代码的情况下在 H2 中编写函数?我的要求是将用 SQL 编写的函数翻译成 H2 而不使用 Java 代码。我在不同的门户网站上发现了很多使用 Java 代码做同样事情的例子。对你的帮助表示感谢。
问候阿伦
目前,H2 仅支持用 Java 或相关语言(例如 Groovy 或 Scala)编写的函数。不支持PL/SQL (Oracle)和T-SQL(MS SQL Server、Sybase)。
如果您的主要目标是在您的 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);
}
}
将上述方法声明为 H2 的 ALIAS
CREATE ALIAS countBooks
FOR "org.example.Functions.countBooks";
在 SQL 中使用函数
SELECT author.last_name, countBooks(author.id)
FROM author
当然,H2 自己的 SQL 抽象JaQu也可以采用类似的方法。我认为使用 JaQu 不会增加任何额外的依赖。