Função SQLSTATE

SQLSTATE é uma função de estado do banco de dados que retorna um tipo de dados CHARACTER de 5 caracteres com um valor padrão de '00000' (cinco zeros em uma cadeia).

SINTAXE

Em um fluxo de mensagens, você pode acessar e atualizar um recurso do banco de dados externo utilizando as funções de banco de dados ESQL disponíveis nos nós Filter, Database e Compute. Ao efetuar chamadas para um banco de dados externo, você poderá obter erros, como uma tabela não existe, um banco de dados não está disponível ou uma inserção de uma chave que já existe.

Quando ocorrerem estes erros, a ação padrão do intermediário será gerar uma exceção. Esse comportamento é determinado de acordo com a definição da propriedade Emitir exceção em caso de erro do banco de dados. Se você selecionar esta caixa de opções, o intermediário interromperá o processamento do nó, propagará a mensagem para o terminal de falhas do nó e gravará os detalhes do erro em ExceptionList. Se desejar substituir o comportamento padrão e manipular um erro do banco de dados no ESQL no nó, limpe a caixa de opções Emitir exceção em caso de erro do banco de dados. O intermediário não emite uma exceção e será necessário incluir a instrução THROW para emitir uma exceção caso um determinado código de estado SQL não seja esperado. Consulte Instrução THROW para obter uma descrição de THROW.

Se você escolher tratar erros de banco de dados em um nó, poderá utilizar a função de estado de banco de dados SQLSTATE para receber informações sobre o status da chamada DBMS feita em ESQL. Você poderá incluí-la em instruções condicionais no ESQL do nó atual para que ele reconheça e lide com possíveis erros.

Estados de SQL

Em ESQL, os estados de SQL são cadeias de caracteres de comprimento variável. Por convenção, eles são compostos de seis caracteres, somente de 0 a 9 e de A a Z. O significado dos seis caracteres é:
Caractere 1
A origem da exceção
Caracteres 2 - 3
A classe da exceção
Caracteres 4 - 6
A subclasse da exceção

O estado SQL de uma expressão é determinado por um processo de dois estágios. No primeiro estágio, as informações da exceção são examinadas e quaisquer exceções de agrupamento (ou seja, informações que indicam o que o intermediário estava fazendo no momento em que ocorreu a exceção) são percorridas até que a exceção que descreve o erro original seja localizada.

O segundo estágio é o seguinte:
  1. Se a exceção selecionada for uma exceção de banco de dados, o estado SQL será aquele fornecido pelo banco de dados, mas prefixado pela letra "D" para evitar qualquer confusão com exceções que surgirem no intermediário. O código SQL, erro nativo e texto do erro são aqueles fornecidos pelo banco de dados.
  2. Se a exceção selecionada for uma exceção do usuário (ou seja, originada em uma instrução THROW), o código SQL, estado, erro nativo e texto do erro serão extraídos, em ordem, das quatro primeiras inserções da exceção. O valor do estado resultante é extraído no estado em que se encontra (não prefixado por uma letra como "U"). De fato, a letra "U" não é utilizada pelo intermediário como um indicador de origem. Se quiser definir um estado SQL exclusivo em vez de imitar um existente, utilize os estados SQL iniciados com a letra "U". Utilizar estados SQL iniciados com a letra "U" permite que um manipulador corresponda todas as exceções definidas pelo usuário e emitidas com um operador LIKE’U%’.
  3. Se a exceção selecionada originou-se do transporte da mensagem ou da própria implementação do ESQL, o código SQL, estado, erro nativo e texto do erro aparecerão conforme descrito na lista a seguir.
  4. Para todas as outras exceções, o estado SQL é '', indicando sem origem, sem classe e sem subclasse.

Algumas exceções que fornecem atualmente um estado SQL vazio podem fornecer estados individuais em releases futuros. Se deseja capturar exceções não classificadas, utilize o curinga "todos" ("%") para o estado SQL no último manipulador de um escopo. Isso continuará a captura do mesmo conjunto de exceções, se exceções não classificadas anteriormente receberem novos estados SQL exclusivos.

Os seguintes estados SQL são definidos:

Dddddd
ddddd é o estado retornado pelo banco de dados.
SqlState = ‘S22003'
Estouro aritmético. Uma operação cujo resultado é um tipo numérico que resultou em um valor acima do intervalo suportado.
SqlState = ‘S22004’
Valor nulo não permitido. Um valor nulo estava presente em um local em que valores nulos não são permitidos.
SqlState = ‘S22007’
Formato inválido de data e hora. Uma cadeia de caracteres utilizada em uma coerção de caractere para um tipo de data/hora obteve o formato básico incorreto (por exemplo, '01947-10-24') ou obteve valores fora dos intervalos permitidos pelo calendário Gregoriano (por exemplo, '1947-21-24').
SqlState = ‘S22008’
Estouro do campo de data e hora. Uma operação cujo resultado é um tipo de data/hora que resultou em um valor acima do intervalo suportado.
SqlState = ‘S22011’
Erro de SUBSTRING. Os parâmetros FROM e FOR, em conjunto com o comprimento do primeiro operando, violam as regras da função SUBSTRING.
SqlState = ‘S22012’
Divisão por zero. Uma operação de divisão cujo tipo de dados do resultado não possui conceito de infinidade obteve um operando zero à direita.
SqlState = ‘S22015’
Estouro de campo de intervalo. Uma operação cujo resultado é do tipo INTERVAL resultou em um valor acima do intervalo suportado pelo tipo de dados INTERVAL.
SqlState = ‘S22018’
Valor de caractere inválido para coerção.
SqlState = ‘SPS001’
Terminal de destino inválido. Um PROPAGATE para a instrução de terminal tentou utilizar um nome de terminal inválido.
SqlState = ‘SPS002’
Rótulo de destino inválido. Um PROPAGATE para a instrução de rótulo tentou utilizar um rótulo inválido.
SqlState = 'MQW001', SqlNativeError = 0
O fluxo de bits não atende aos requisitos de mensagens do MQ. Nenhuma tentativa foi feita para colocá-lo em uma fila. Uma nova tentativa e a administração da fila não conseguirão resolver esse problema.
SqlState = 'MQW002', SqlNativeError = 0
Os nomes da fila de destino ou do gerenciador de filas não eram válidos (ou seja, não puderam ser convertidos de unicode para a página de códigos do gerenciador de filas). Uma nova tentativa e o esvaziamento da fila não conseguirão resolver esse problema.
SqlState = 'MQW003', SqlNativeError = 0
O modo de pedido foi especificado, mas os nomes da fila de "resposta" ou do gerenciador de filas não eram válidos (isto é, não puderam ser convertidos de unicode para a página de códigos da mensagem). Uma nova tentativa e o esvaziamento da fila não conseguirão resolver esse problema.
SqlState = 'MQW004', SqlNativeError = 0
O modo de resposta foi especificado, mas os nomes da fila ou do gerenciador de filas extraídos da mensagem não eram válidos (ou seja, não puderam ser convertidos da página de códigos especificada para unicode). Uma nova tentativa e o esvaziamento da fila não conseguirão resolver esse problema.
SqlState = 'MQW005', SqlNativeError = 0
O modo de lista de destino foi especificado, mas a lista de destino fornecida não atende aos requisitos básicos de listas de destino. Nenhuma tentativa foi feita para colocar a mensagem em uma fila. Uma nova tentativa e a administração da fila não conseguirão resolver esse problema.
SqlState = 'MQW101', SqlNativeError = As returned by MQ
Não foi possível abrir a fila ou o gerenciador de filas de destino. É provável que a administração da fila consiga resolver esse problema, mas uma nova tentativa não obterá êxito.
SqlState = 'MQW102', SqlNativeError = as returned by MQ
Não foi possível gravar na fila ou no gerenciador de filas destino. É provável que uma nova tentativa e a administração da fila consigam resolver esse problema.
SqlState = 'MQW201', SqlNativeError = número de destinos com um erro
Ocorreu mais de um erro ao processar uma lista de destino. A mensagem pode ter sido colocada em zero ou mais filas. É provável que uma nova tentativa e a administração da fila consigam resolver esse problema.
Qualquer coisa que o usuário tenha utilizado em uma instrução THROW
Utilize Uuuuuuu para as exceções do usuário, a menos que esteja imitando uma das exceções definidas acima.
Cadeia vazia
Todos os outros erros.
Conceitos relacionados
Visão Geral de Fluxos de Mensagens
Visão Geral do ESQL
Tarefas relacionadas
Definindo o Conteúdo do Fluxo de Mensagens
Desenvolvendo ESQL
Capturando o Estado do Banco de Dados
Referências relacionadas
Função SQLCODE
Função SQLERRORTEXT
Função SQLNATIVEERROR
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ak17990_