How to write a function in the H2 database without using Java

前端 未结 2 1755
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-10 06:52

This question is reference to question \"How to create stored procedure using H2 database?\" (continuation of the same question).

Is there a way to write a function

相关标签:
2条回答
  • 2020-12-10 07:14

    If your primary goal is to run SQL (or SQLesque) statements within your H2 Java user-defined functions, jOOQ could be an option as a "PL/Java" implementation. Of course, this would still be a Java solution.

    An example of such a function can be seen in this blog post:

    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);
        }
    }
    

    Declare the above method as an ALIAS to H2

    CREATE ALIAS countBooks 
       FOR "org.example.Functions.countBooks";
    

    Use the function in SQL

    SELECT author.last_name, countBooks(author.id) 
    FROM author
    

    A similar approach can be taken with H2's own SQL abstraction JaQu, of course. Using JaQu wouldn't add any additional dependency, I think.

    0 讨论(0)
  • 2020-12-10 07:15

    Currently, H2 does only support functions written in Java or a related language (for example Groovy or Scala). PL/SQL (Oracle) and T-SQL (MS SQL Server, Sybase) are not supported.

    0 讨论(0)
提交回复
热议问题