Instrução DELETE FROM

A instrução DELETE FROM exclui linhas de uma tabela em um banco de dados externo, com base em uma condição de procura.

SINTAXE

Todas as linhas para as quais a expressão da cláusula WHERE é avaliada como TRUE são excluídas da tabela identificada por TableReference.

Cada linha é examinada sucessivamente e uma variável é configurada para apontar para a linha atual. Normalmente, a expressão da cláusula WHERE utiliza essa variável para acessar valores de colunas e, por conseguinte, fazer com que as linhas sejam retidas ou excluídas de acordo com o conteúdo. A variável é referida por CorrelationName ou, na ausência de uma cláusula AS, por TableName.

Referência de Tabela

Uma referência de tabela é um caso especial das referências de campos utilizadas para referir-se às árvores de mensagens. Ela sempre inicia com a palavra "Database" e pode conter um dos seguintes:
  • Apenas um nome de tabela.
  • Um nome de esquema e um nome de tabela.
  • Um nome de origem de dados (ou seja, o nome de uma instância de banco de dados), um nome de esquema e um nome de tabela.
Em cada caso, o nome pode ser especificado diretamente ou por uma expressão entre chaves ({...}). Um nome de origem de dados, esquema ou tabela especificado diretamente está sujeito à substituição de nome. Ou seja, se o nome utilizado tiver sido declarado como um nome conhecido, o valor do nome declarado será utilizado no lugar do próprio nome (consulte Instrução DECLARE).

Se um nome de esquema não for especificado, será utilizado o esquema padrão para o usuário do banco de dados do intermediário.

Se um nome de origem de dados não for especificado, será utilizado o banco de dados apontado pelo atributo origem de dados do nó.

A Cláusula WHERE

A expressão da cláusula WHERE pode utilizar qualquer um dos operadores e funções do intermediário, em qualquer combinação. Ela pode referir-se a colunas de tabelas, campos de mensagens e quaisquer variáveis ou constantes declaradas.

Entretanto, lembre-se que o intermediário trata a expressão da cláusula WHERE, examinando-a e decidindo se a expressão inteira pode ser avaliada pelo banco de dados. Se puder, ela será fornecida ao banco de dados. A fim de ser avaliada pelo banco de dados, ela deve utilizar somente as funções e os operadores suportados pelo banco de dados.

Entretanto, a cláusula WHERE pode referir-se a campos de mensagens, nomes de correlação declarados por SELECTs que os contêm e quaisquer outras variáveis ou constantes declaradas no escopo.

Se expressão inteira não puder ser avaliada pelo banco de dados, o intermediário procurará operadores AND de primeiro nível e examinará cada subexpressão separadamente. Em seguida, ele tentará fornecer ao banco de dados essas subexpressões que pode avaliar, deixando o intermediário avaliar o restante. É necessário estar ciente dessa situação por duas razões:
  1. Aparentemente, as alterações comuns em expressões da cláusula WHERE podem ter grandes efeitos no desempenho. Você pode determinar a porcentagem da expressão que foi fornecida ao banco de dados, examinando um rastreio do usuário.
  2. Algumas funções dos bancos de dados exibem diferenças sutis de comportamento em comparação com as funções do intermediário.

Tratamento de erros

É possível que ocorram erros durante as operações de exclusão. Por exemplo, o banco de dados pode não estar operacional. Nestes casos, uma exceção é emitida (a menos que o nó tenha sua propriedade throw exception on database error configurada como FALSE). Essas exceções configuram os valores apropriados de código SQL, estado, erro nativo e texto de erro e podem ser tratadas por rotinas de tratamento de erro (consulte a instrução DECLARE HANDLER).

Para obter informações adicionais sobre como manipular erros do banco de dados, consulte Capturando o Estado do Banco de Dados.

Exemplos

O exemplo a seguir supõe que a propriedade dataSource foi configurada e que o banco de dados identificado por ela possui uma tabela chamada SHAREHOLDINGS, com uma coluna chamada ACCOUNTNO.
DELETE FROM Database.SHAREHOLDINGS AS S
       WHERE S.ACCOUNTNO = InputBody.AccountNumber;

Remove todas as linhas da tabela SHAREHOLDINGS em que o valor na coluna ACCOUNTNO (na tabela) seja igual àquele do campo AccountNumber na mensagem. Pode excluir zero, uma ou mais linhas da tabela.

O próximo exemplo mostra a utilização de nomes de origem de dados, esquema e tabela:
-- Declarar variáveis para conter os nomes de origem de dados, esquema e tabela e
-- configurar seus valores padrão
DECLARE Source CHARACTER 'Production';
DECLARE Schema CHARACTER 'db2admin';
DECLARE Table  CHARACTER 'DynamicTable1';

-- O código que calcula seus valores reais fica aqui

-- Excluir linhas da tabela
DELETE FROM Database.{Source}.{Schema}.{Table} As R WHERE R.Name = 'Joe';
Conceitos relacionados
Visão Geral do ESQL
Tarefas relacionadas
Desenvolvendo ESQL
Referências relacionadas
Diagramas de Sintaxe: Tipos Disponíveis
instruções ESQL
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ak04990_