Merge - 8i??

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
izaura
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Ter, 06 Dez 2005 11:53 am
Localização: santos-sp

Pessoal, tenho a seguinte merge abaixo, porém a versão do oracle é 8, gostaria de saber como migro esse merge para a versão 8.

Selecionar tudo

merge into bx_tbl_agencia bx_ag
using (select distinct party_name,
                       account_number,
                       location  
       from VIEW_GOL_AR_BAIXA_OPENSKIES 
      ) v_ag
on ( v_ag.account_number = bx_ag.account_number  and v_ag.location = bx_ag.location )
when not matched then insert (bx_ag.id,
                              bx_ag.party_name,
                              bx_ag.account_number,
                              bx_ag.location)
values (seq_agencia.nextval,
        v_ag.party_name,
        v_ag.account_number,
        v_ag.location);
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Izaura,

Estou atualizando este tópico antigo em aberto com uma resposta, para o caso de algum forista se deparar com este problema no ORACLE 8.

Por favor, consultar este link para maiores informações:

http://www.tek-tips.com/viewthread.cfm?qid=949305

Abraços,

Sergio Coutinho
Avatar do usuário
fbifabio
Moderador
Moderador
Mensagens: 199
Registrado em: Ter, 22 Fev 2011 1:51 pm
Localização: São Paulo - SP
Contato:
Fábio Prado
www.fabioprado.net

Pessoal,

O Merge é uma instrução que faz parte do padrão ANSI 2003 e o Oracle 8 e 8i não são aderentes a este padrão. Merge só funciona no Oracle 9i ou versão superior. Para fazer o processamento correspondente é necessário criar um bloco PL/SQL com a estrutura

Selecionar tudo

SELECT ...  IF EXISTE THEN UPDATE ... ELSE INSERT .... END IF;
, ou escrever uma estrutura de comandos similar dentro da aplicação.

[]s
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Atualizando ..

A nota (link) mencionada anteriormente já sugere uma sintaxe adequada:

Selecionar tudo

BEGIN
   UPDATE my_table SET some_column = some_value
    WHERE some_condition_is_true;
   IF (sql%ROWCOUNT = 0) THEN
      INSERT INTO my_table .......;
   END IF;
END;


Abraços,

Sergio
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Majestic-12 [Bot] e 6 visitantes