Capturando o Estado do Banco de Dados

Se ocorrer um erro ao acessar um banco de dados externo, você tem duas opções:

A primeira opção é o padrão; o processamento ESQL no nó atual é abandonado. Em seguida, a exceção é propagada para trás através do fluxo de mensagens até alcançar um nó de captura ou o nó input desse fluxo de mensagens. Se a exceção alcançar o nó input, todas as transações serão revertidas.

A segunda opção requer o entendimento de códigos de retorno do banco de dados e de um curso lógico de ação a ser executada quando ocorrer um erro. Para ativar este processamento de erros do banco de dados em linha, é necessário limpar a propriedade Emitir Exceção em Erro do Banco de Dados do nó Filter, Database ou Compute.Se isso não for feito, o nó configurará os indicadores de estado do banco de dados SQLCODE, SQLSTATE, SQLNATIVEERROR e SQLERRORTEXT com informações apropriadas do gerenciador de banco de dados em vez de emitir uma exceção.

Os indicadores contêm informações somente quando ocorre um erro (não um aviso), a menos que você tenha selecionado a propriedade Tratar Avisos como Erros. No caso de êxito em operações de banco de dados de informações, os indicadores contêm seus valores padrão de êxito.

Você pode utilizar os valores contidos nesses indicadores em instruções ESQL para tomar decisões sobre a ação a ser tomada. É possível acessar esses indicadores com as funções SQLCODE, SQLSTATE, SQLNATIVEERROR e SQLERRORTEXT.

Se estiver tentando processar os erros em linha, você deve verificar os indicadores de estado depois que cada instrução do banco de dados for executada, para garantir que está capturando e avaliando todos os erros. Ao processar os indicadores, se encontrar um erro que não consegue tratar em linha, você pode produzir uma nova exceção, tanto para manipulá-la em um nó de captura de upstream, como para deixá-la passar até o nó input para que a transação seja revertida. Você pode utilizar a instrução ESQL THROW para fazer isso.

Você pode verificar o caso especial em que o SELECT não retorna nenhum dado. Esta situação não é considerada um erro e SQLCODE não é definido, portanto você precisa testá-lo explicitamente. Esse procedimento é descrito na seção Verificando Retornos para SELECT.

Utilizando ESQL para Acessar Indicadores de Estado do Banco de Dados

O exemplo de ESQL a seguir mostra como utilizar as quatro funções de estado do banco de dados e como incluir as informações de erro retornadas em uma exceção:

DECLARE SQLState1 CHARACTER;
DECLARE SQLErrorText1 CHARACTER;
DECLARE SQLCode1 INTEGER;
DECLARE SQLNativeError1 INTEGER;
  
-- Faça uma inserção no banco de dados em uma tabela que não exista --
INSERT INTO Database.DB2ADMIN.NONEXISTENTTABLE (KEY,QMGR,QNAME)
                                                            VALUES (45,'REG356','my TESTING 2');

--Recupere os códigos de retorno do banco de dados --
SET SQLState1 = SQLSTATE;
SET SQLCode1 = SQLCODE;
SET SQLErrorText1 = SQLERRORTEXT;
SET SQLNativeError1 = SQLNATIVEERROR;

--Use the THROW statement to back out the database and issue a user exception--
THROW USER EXCEPTION MESSAGE 2950 VALUES
( 'The SQL State' , SQLState1 , SQLCode1 , SQLNativeError1 ,
SQLErrorText1 );

Você não precisa produzir uma exceção ao detectar um erro no banco de dados; pode ser preferível salvar as informações de erro retornadas na árvore LocalEnvironment e incluir um nó Filter em seu fluxo de mensagens que roteie a mensagem para subfluxos de erro ou êxito de acordo com os valores salvos.

O programa de amostra Amostra de Reservas de Linhas Aéreas fornece outro exemplo de ESQL que utiliza essas funções de banco de dados.

Conceitos relacionados
Visão Geral de Fluxos de Mensagens
Estrutura em Árvore ExceptionList
Visão Geral do ESQL
Modelagem de Mensagens
Codificando o ESQL para Tratar Erros
Tarefas relacionadas
Projetando um Fluxo de Mensagens
Definindo o Conteúdo do Fluxo de Mensagens
Tratando Erros em Fluxos de Mensagens
Gerenciando Arquivos ESQL
Verificando Retornos para SELECT
Referências relacionadas
Nó Compute
Nó Database
Nó Filter
Referência de ESQL
Funções de Estado de Banco de Dados ESQL
Instrução DECLARE
Instrução DECLARE HANDLER
Instrução INSERT
Instrução SET
Instrução THROW
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ak05840_