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

Dentro de um fluxo de mensagens, você poderá acessar e atualizar um recurso de banco de dados externo utilizando as funções do banco de dados ESQL disponíveis nos nós Compute, Banco de Dados e Filter. 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 propriedade, o intermediário parará o processamento o nó, propagará a mensagem para o terminal de falha do nó e gravará os detalhes do erro para a ExceptionList. Se você desejar substituir o comportamento padrão e manipular um erro do banco de dados no ESQL no nó, desmarque Emitir Exceção no 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.

Para tratar os erros de banco de dados em um nó, você poderá utilizar a função de estado do banco de dados SQLSTATE para receber informações sobre o 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 dizem o que o intermediário estava fazendo no momento em que a exceção ocorreu) são suportadas 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"). A letra "U" não é utilizada pelo intermediário como um indicador de origem. Se você desejar definir um estado de SQL exclusivo em vez de imitar um existente, utilize estados de SQL que começam com a letra "U". Se você utilizar estados SQL que começam com a letra "U", poderá gravar um manipulador de erro para corresponder 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. Este curinga continuará capturando o mesmo conjunto de exceções se exceções não classificadas anteriormente receberem novos estados de 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 = 'S22007'
O formato data/hora não é válido. Uma cadeia de caracteres utilizada em uma conversão de caractere para um tipo de data/hora tinha o formato básico errado (por exemplo, '01947-10-24') ou tinha 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 resultou em um valor além do intervalo suportado.
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'
O valor do caractere designado não é válido.
SqlState = 'SPS001'
O terminal de destino não é válido. Um PROPAGATE para a instrução de terminal tentou utilizar um nome de terminal inválido.
SqlState = 'SPS002'
O rótulo de destino não é vá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 os requisitos para as mensagens de WebSphere MQ. Nenhuma tentativa foi feita para colocá-lo em uma fila. Tentar novamente e a administração da fila não resolvem este problema.
SqlState = 'MQW002', SqlNativeError = 0
Os nomes de fila de destino ou de gerenciador de filas não eram válidos (ou seja, eles não puderam ser convertidos de Unicode para a página de códigos do gerenciador de filas). Tentar novamente e o esvaziamento de fila não resolve este problema.
SqlState = 'MQW003', SqlNativeError = 0
O modo de pedido foi especificado mas os nomes da fila "reply to" 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 da mensagem). Tentar novamente e o esvaziamento de fila não resolve este problema.
SqlState = 'MQW004', SqlNativeError = 0
O modo de resposta foi especificado mas os nomes da fila ou do gerenciador de filas obtidos da mensagem não eram válidos (ou seja, eles não puderam ser convertidos da página de códigos fornecida para Unicode). Tentar novamente e o esvaziamento de fila não resolve este 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. Tentar novamente e a administração da fila não resolvem este problema.
SqlState = 'MQW101', SqlNativeError = returned by WebSphere MQ
Não foi possível abrir a fila ou o gerenciador de filas de destino. A administração da fila pode resolver este problema mas tentar novamente não.
SqlState = 'MQW102', SqlNativeError = returned by WebSphere MQ
Não foi possível gravar na fila ou no gerenciador de filas destino. Tentar novamente e a administração de fila podem resolver este 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. Tentar novamente e a administração de fila podem resolver este 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

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
Última atualização : 2009-02-13 16:12:49

ak17990_