Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

A consulta do Oracle SQL Update leva dias para atualizar


Você pode tentar isso
  1  MERGE
  2     INTO  target_table tgt
  3     USING source_table src
  4     ON  ( src.object_id = tgt.object_id )
  5  WHEN MATCHED
  6  THEN
  7     UPDATE
  8     SET   tgt.object_name = src.object_name
  9     ,     tgt.object_type = src.object_type
 10  WHEN NOT MATCHED
 11  THEN
 12     INSERT ( tgt.object_id
 13            , tgt.object_name
 14            , tgt.object_type )
 15     VALUES ( src.object_id
 16            , src.object_name
 17            , src.object_type );

A sintaxe a princípio parece um pouco assustadora, mas se lermos de cima para baixo, é bastante intuitiva. Observe as seguintes cláusulas:

•MERGE (linha 1):como dito anteriormente, esta é agora a 4ª instrução DML no Oracle. Quaisquer dicas que desejemos adicionar seguem diretamente esta palavra-chave (ou seja, MERGE /*+ HINT */);

•INTO (linha 2):é assim que especificamos o destino para o MERGE. O destino deve ser uma tabela ou uma visualização atualizável (uma visualização em linha não pode ser usada aqui);

•USING (linha 3):a cláusula USING representa o conjunto de dados de origem para o MERGE. Isso pode ser uma única tabela (como em nosso exemplo) ou uma visualização em linha;

•ON() (linha 4):a cláusula ON é onde fornecemos a junção entre o conjunto de dados de origem e a tabela de destino. Observe que as condições de junção devem estar entre parênteses;

•WHEN MATCHED (linha 5):esta cláusula é onde instruímos o Oracle sobre o que fazer quando já temos um registro correspondente na tabela de destino (ou seja, há uma junção entre os conjuntos de dados de origem e destino). Obviamente, queremos um UPDATE neste caso. Uma das restrições desta cláusula é que não podemos atualizar nenhuma das colunas usadas na cláusula ON (embora, é claro, não precisemos, pois elas já correspondem). Qualquer tentativa de incluir uma coluna de junção gerará uma exceção de identificador inválido não intuitivo; e

•WHEN NOT MATCHED (linha 10):esta cláusula é onde inserimos registros para os quais não há correspondência atual.