Comandos de controle de transação no OpenEdge SQL

Escrito por Marcos Kirchner em 8 de dezembro de 2011, 16:27h

O OpenEdge, assim como vários sistemas gerenciadores de banco de dados (SGBD), possui gerenciamento de transações. Dois comandos normalmente são utilizados para controlar o estado das transações:

  • COMMIT: informa ao SGBD que a transação foi concluída e deve estar refletida no banco de dados;
  • ROLLBACK: informa ao SGBD que a transação deve ser revertida e que nenhuma alteração por ela realizada deve ser refletida no banco de dados.

O OpenEdge segue este mesmo conceito, mas o engine SQL do OpenEdge não aceita estes dois comandos diretamente. Ao tentar enviar estes comandos diretamente para o banco de dados é gerado um erro de sintaxe. As requisições de COMMIT/ROLLBACK devem ser enviadas ao OpenEdge através de chamadas das APIs de acesso (ODBC ou JDBC). Esta afirmação pode parecer deslocada, visto que o utilitário sqlexp processa normalmente os comandos COMMIT e ROLLBACK digitados na linha de comando. Na prática, o sqlexp analisa a linha de comando e chama a API correspondente para executar a ação.

A forma de envio varia de acordo com a linguagem e/ou API de acesso utilizada:

  • em Java devem ser utilizados os métodos commit() e rollback() da interface java.sql.Connection;
  • na plataforma .NET devem ser utilizados os métodos Commit() e Rollback() da classe System.Data.Odbc.OdbcTransaction;
  • na linguagem PHP utilize as funções odbc_commit() e odbc_rollback();
  • se estiver utilizando chamadas diretas às funções do ODBC, utilize a função SQLEndTran passando SQL_COMMIT ou SQL_ROLLBACK para o parâmetro CompletionType.

Outras linguagens/plataformas certamente possuem outras particularidades. Consulte a documentação da sua linguagem para mais informações.

Abaixo um exemplo simples de utilização de commit/rollback na linguagem C#, na plataforma .NET:

 

public void UpdateCustomer() {
    OdbcConnection conn = new OdbcConnection("Driver={Progress OpenEdge 10.2B driver}; HostName=localhost; PortNumber=33445; DatabaseName=sports2000; LogonID=sysprogress; Password=sys");
    conn.Open();
    OdbcTransaction tran = conn.BeginTransaction();

    try {
        OdbcCommand cmd = new OdbcCommand();
        cmd.Connection = conn;
        cmd.Transaction = tran;

        cmd.CommandText = "INSERT INTO PUB.department VALUES (800, 'SBDSA')";
        cmd.ExecuteNonQuery();

        cmd.CommandText = "UPDATE PUB.customer SET Name = 'Marcos Kirchner' WHERE CustNum = 1";
        cmd.ExecuteNonQuery();

        tran.Commit();
        Console.WriteLine("Transação concluída");
    }
    catch (OdbcException) {
        tran.Rollback();
        Console.WriteLine("Erro, transação abortada");
    }

    conn.Close();
}

 

Este programa de exemplo abre uma conexão ODBC com o OpenEdge, inicia uma transação, cria um novo departamento, atualiza o nome de um cliente e finaliza a transação. Se ocorrer algum erro o programa solicita que a transação seja abortada.

Categorias: Banco de dados | Programação | Progress

Tags: , , ,

Comentar




biuquote
  • Comentário
  • Pré-visualização
Loading


Acesso LogMeIn

Informe o código PIN: