2012-07-30 115 views
5

Soy nuevo en la base de datos y recientemente comencé a escribir casos de prueba para la base de datos H2. Quiero saber cómo probar un procedimiento almacenado en Eclipse. Yo he visto el siguiente:?Procedimiento almacenado en la base de datos H2

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

How to CREATE PROCEDURE in H2

El código de muestra que figura en el enlace h2database,

"CREATE ALIAS NEXT_PRIME AS $$ 
String nextPrime(String value) { 
    return new BigInteger(value).nextProbablePrime().toString(); 
} 
$$; 
" 
  • Dónde debe este ser declarado y la forma de ejecutarlo ?

PD - Tengo el archivo H2 JAR y lo estoy probando.

Si alguien puede decirme cómo escribir un procedimiento almacenado simple en Java para H2, sería de gran ayuda.

También hay algún equivalente de lo siguiente en H2?

"begin dbms_output"?

Gracias.

+0

¿Leyó la documentación? La declaración que ha publicado es una declaración SQL, debe ejecutarla utilizando la API JDBC. –

+0

Quiero saber cómo llamar a esto utilizando la API. Cualquier referencia de código de muestra sería de gran ayuda. ¿Dónde debería declararse esta parte de SQL? Entiendo que esto es probablemente muy elemental, pero recién estoy comenzando. Gracias – Abi

+0

Hay toneladas de ejemplos de referencias de código en Internet, y hay mucha documentación en el sitio web H2. Solo necesita buscar y leer. Sugiero que primero aprenda los conceptos básicos sobre JDBC y SQL. –

Respuesta

6

Puede haber pasado por alto los ejemplos en src/test/org/h2/samples/Function.java. He aquí un ejemplo relacionado:

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

Consola: Version: 1.4.191

Adición: La función no se limita a las funciones; los métodos aliased pueden ejecutar arbitrariamente Java code. Por ejemplo, el método query() define en Function.java pueden alias y llama como se muestra abajo:

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

+0

Gracias @trashgod (+1) - * finally *, un ejemplo completo de invocación de la función Java como un alias. – smeeb

+0

En revisión, tenga en cuenta que 'cli.Function.query' es una copia de' org.h2.samples.Function.query '. – trashgod

6

no existe un procedimiento almacenado y la función definida por el usuario SQL en la base de datos H2 en lugar de que usamos java métodos y cree un alias para referir eso. Podemos llamar a esos métodos usando alias.

A continuación se muestra un ejemplo sencillo: **

DROP ALIAS IF EXISTS MYFUNCTION; 
CREATE ALIAS MYFUNCTION AS $$ 
String getTableContent(java.sql.Connection con) throws Exception { 
    String resultValue=null; 
    java.sql.ResultSet rs = con.createStatement().executeQuery(
    " SELECT * FROM TABLE_NAME"); 
     while(rs.next()) 
     { 
     resultValue=rs.getString(1); 
     } 
    return resultValue; 
} 
$$; 
+1

Creo que olvidó' rs.next() '. –

+0

@ThomasMueller ¿H2 aún no es compatible con los procedimientos almacenados? Mire mi último comentario en la sección de comentarios de preguntas. ¿Es correcto o incorrecto? –

+1

@AbdulJabbarWebBestow H2 siempre compatible procedimientos almacenados ... ¿Tal vez su definición de procedimiento almacenado no es lo mismo que mi definición? ¿Cuál es su definición? ¿Algo que es 100% compatible con Oracle? Sí, H2 no es 100% compatible con Oracle. –

1

procedimiento almacenado en la base de datos H2 es igual que Java methods.So escribir métodos Java y puede invocar el uso de alias.

Cuestiones relacionadas