Consultor Eletrônico



Kbase 70383: Comandos de controle de transação no OpenEdge SQL
Autor   Marco Aurelio Scheidt - Tecnologia
Acesso   Público
Publicação   3/19/2018
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, 'CAT')";
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.

Autor: Marcos Kirchner