Se ocorrer um erro quando o intermediário acessar um banco de dados externo, você poderá deixar o intermediário emitir uma exceção durante o processamento do nó ou utilizar instruções ESQL para processar a exceção no próprio nó.
Deixar o intermediário emitir uma exceção durante o processamento do nó é o padrão; o processamento de 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 utilização de instruções ESQL para processar a exceção no próprio nó requer um entendimento de códigos de retorno do banco de dados e um curso lógico de ação a ser executada quando ocorrer um erro. Para ativar este processamento de erro do banco de dados seqüencial, é necessário limpar a propriedade Emitir Exceção em Erro do Banco de Dados do nó Filter, Banco de Dados ou Compute. Se você desmarcar esta propriedade, 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 o processamento de erro sequencial, verifique os indicadores de estado após a execução de cada instrução do banco de dados para assegurar que tenha capturado e avaliado todos os erros. Ao processar os indicadores, se encontrar um erro que não possa ser manipulado de forma sequencial, será possível gerar uma nova exceção para lidar com ele enviando dados em um nó de captura, ou deixá-lo passar pelo nó de entrada para que a transação seja recuperada, para a qual é possível utilizar a instrução ESQL THROW.
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 é configurado, portanto, é necessário fazer o teste explicitamente; consulte Verificando Retornos para SELECT.
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 a instrução THROW para recuperar o banco de dados e emitir uma exceção de usuário-- THROW USER EXCEPTION MESSAGE 2950 VALUES ( 'The SQL State' , SQLState1 , SQLCode1 , SQLNativeError1 , SQLErrorText1 );
Você não precisa emitir uma exceção quando detectar um erro do banco de dados; talvez prefira salvar as informações de erro retornadas na árvore LocalEnvironment e incluir um nó Filter em seu fluxo de mensagens que roteia a mensagem para subfluxos de erro ou de êxito, de acordo com os valores salvos.