Stored Procedure in H2 Database

Abi picture Abi · Jul 30, 2012 · Viewed 28.9k times · Source

I am new to database and recently started writing test cases for H2 database. I want to know how to test a stored procedure in Eclipse. I have seen the following:

http://www.h2database.com/html/features.html#user_defined_functions

How to CREATE PROCEDURE in H2

The sample code given in the h2database link,

"CREATE ALIAS NEXT_PRIME AS $$
String nextPrime(String value) {
    return new BigInteger(value).nextProbablePrime().toString();
}
$$;
" 
  • Where should this be declared?and how to run it?

PS - I have the H2 JAR file and am testing it.

If someone can tell me how to write a simple stored procedure in Java for H2, it would be of great help.

Also is there any equivalent of the following in H2?

"begin dbms_output" ?

Thanks.

Answer

trashgod picture trashgod · Aug 7, 2012

You may have overlooked the examples in src/test/org/h2/samples/Function.java. Here's a related example:

Connection conn = DriverManager.getConnection("jdbc:h2:mem:", "sa", "");
Statement st = conn.createStatement();
st.execute("CREATE ALIAS getVersion FOR \"org.h2.engine.Constants.getVersion\"");
ResultSet rs;
rs = st.executeQuery("CALL getVersion()");
if (rs.next()) System.out.println("Version: " + rs.getString(1));

Console: Version: 1.4.191

Addendum: The feature is not limited to functions; aliased methods can execute arbitrary Java code. For example, the query() method defined in Function.java may be aliased and called as shown below:

Connection conn = DriverManager.getConnection("jdbc:h2:mem:", "sa", "");
Statement st = conn.createStatement();
st.execute("CREATE ALIAS query FOR \"cli.Function.query\"");
rs = st.executeQuery("CALL query('SELECT NAME FROM INFORMATION_SCHEMA.USERS')");
while (rs.next()) {
    System.out.println("User: " + rs.getString(1));
}

Console: User: SA

Note that cli.Function.query is a copy of org.h2.samples.Function.query.