Partilhar via


Como usar um procedimento armazenado com um status de retorno

Baixar o JDBC Driver

Um procedimento armazenado do SQL Server que você pode chamar é um que retorna um parâmetro de status ou resultado. Esse status é usado para indicar o êxito ou a falha do procedimento armazenado. O Microsoft JDBC Driver para SQL Server fornece a classe SQLServerCallableStatement que pode ser usada para chamar esse tipo de procedimento armazenado e para processar os dados que ele retorna.

Ao chamar esse tipo de procedimento armazenado usando o driver JDBC, você deve usar a sequência de escape call do SQL em conjunto com o método prepareCall da classe SQLServerConnection. A sintaxe da sequência de escape call com um parâmetro de status de retorno é a seguinte:

{[?=]call procedure-name[([parameter][,[parameter]]...)]}

Observação

Para obter mais informações sobre as sequências de escape SQL, confira Como usar sequências de escape do SQL.

Ao construir a sequência de escape call, especifique o parâmetro de status de retorno usando o caractere ? (ponto de interrogação). Esse caractere age como um espaço reservado para o valor de parâmetro que retornará do procedimento armazenado. Para especificar um valor para um parâmetro de status de retorno, é necessário especificar o tipo de dados do parâmetro usando o método registerOutParameter da classe SQLServerCallableStatement antes de executar o procedimento armazenado.

Observação

Ao usar o driver JDBC com um banco de dados do SQL Server, o valor que você especificar para o parâmetro de status de retorno no método registerOutParameter será sempre um inteiro, condição que você pode especificar usando o tipo de dados java.sql.Types.INTEGER.

Além disso, ao passar para o método registerOutParameter um valor para um parâmetro de status de retorno, você deve especificar não só o tipo de dados a ser usado para o parâmetro, mas também o posicionamento ordinal do parâmetro na chamada de procedimento armazenado. No caso do parâmetro de status de retorno, a posição ordinal será sempre 1 porque ele é sempre o primeiro parâmetro na chamada para o procedimento armazenado. Embora a classe SQLServerCallableStatement dê suporte ao uso do nome do parâmetro para indicar o parâmetro específico, você só pode usar o número de posição ordinal para parâmetros de status de retorno.

Como exemplo, crie o seguinte procedimento armazenado no banco de dados de exemplo AdventureWorks2022:

CREATE PROCEDURE CheckContactCity  
   (@cityName CHAR(50))  
AS  
BEGIN  
   IF ((SELECT COUNT(*)  
   FROM Person.Address  
   WHERE City = @cityName) > 1)  
   RETURN 1  
ELSE  
   RETURN 0  
END  

Esse procedimento armazenado retorna o valor de status 1 ou 0, dependendo se a cidade especificada no parâmetro cityName se encontra ou não na tabela Person.Address.

No seguinte exemplo, uma conexão aberta com o banco de dados de amostra AdventureWorks2022 é passada para a função, e o método execute é usado para chamar o procedimento armazenado CheckContactCity:

public static void executeStoredProcedure(Connection con) {
    try(CallableStatement cstmt = con.prepareCall("{? = call dbo.CheckContactCity(?)}");) {
        cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
        cstmt.setString(2, "Atlanta");
        cstmt.execute();
        System.out.println("RETURN STATUS: " + cstmt.getInt(1));
    }
    // Handle any errors that may have occurred.
    catch (SQLException e) {
        e.printStackTrace();
    }
}

Confira também

Como usar instruções com procedimentos armazenados