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