2
respostas

Como Testar Uma Stored Procedure usando H2

Olá ,

Estou trabalhando em um projeto q utiliza stored procedures no Oracle.

Alguém sabe como fazer teste de integração com uma "stored procedure" no H2 ?

grato

2 respostas

Olá

Segue abaixo um exemplo de teste de integração em Java que executa uma stored procedure no H2 e verifica se o resultado é o esperado:

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;

public class StoredProcTest {

    private static Connection conn;

    @BeforeClass
    public static void setUp() throws Exception {
        // Inicia o servidor H2 em memória
        org.h2.tools.Server.createTcpServer("-tcpAllowOthers").start();

        // Conecta ao banco de dados H2
        Class.forName("org.h2.Driver");
        conn = DriverManager.getConnection("jdbc:h2:mem:testdb", "sa", "");

        // Cria a estrutura de banco de dados e a stored procedure no H2
        createDatabaseSchema();
    }

    @Test
    public void testStoredProc() throws SQLException {
        // Executa a stored procedure no H2
        CallableStatement cs = conn.prepareCall("{call my_stored_proc(?, ?)}");
        cs.setInt(1, 1);
        cs.registerOutParameter(2, java.sql.Types.INTEGER);
        cs.execute();
        int result = cs.getInt(2);

        // Verifica se o resultado é o esperado
        Assert.assertEquals(2, result);
    }

    private static void createDatabaseSchema() throws SQLException {
        conn.createStatement().execute("CREATE TABLE my_table (id INT, name VARCHAR(255))");
        conn.createStatement().execute("INSERT INTO my_table VALUES (1, 'foo')");
        conn.createStatement().execute("CREATE PROCEDURE my_stored_proc(IN id INT, OUT result INT) "
                + "READS SQL DATA BEGIN SELECT id INTO result FROM my_table WHERE id = id; END;");
    }

}

Este exemplo usa o driver JDBC do H2 para conectar ao banco de dados em memória e criar a estrutura de banco de dados e a stored procedure. Em seguida, o teste de integração executa a stored procedure usando uma chamada de procedimento armazenado e verifica se o resultado é o esperado usando a asserção assertEquals() do JUnit.

Olá !

Infelizmente externou erro de sintaxe no "create procedure".

verifiquei que o H2 não possui o comando "create procedure" ao invés, ele possui "create alias" para criar pseudo-funções.

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

vc consegue rodar este exemplo em seu pc?