Bem, eu nunca vi isso, mas pelo que DEDUZO nessa sintaxe aí o objetivo é 
fazer um JOIN da e1 com a e2 E atualizar a coluna da e1 com o valor retornado 
na e2 : se é isso, é EXATAMENTE o que o UPDATE com um JOIN como target faz no 
Oracle, mudaria só um pouco a sintaxe, seria UPDATE 
(joinemquestãocomasduastabelas) SET valores... ao invés de UPDATE tabela1 SET 
valores (join)....
  
   []s
   
     Chiappa

--- Em oracle_br@yahoogrupos.com.br, Fabio Prado <fbifabio@...> escreveu
>
> Chiappa, entendi o que vc passou como referência, mas acho que o nosso
> colega está se referindo a fazer parecido com o q vemos no script abaixo,
> que não é padrão ANSI e que eu já fiz coisa parecida no SQL Server quando
> eu era Desenvolvedor e não lembro mais a sintaxe:
> 
> UPDATE hr.employees e1
> SET e1.job_id = e2.job_id
> INNER JOIN hr.employees e2
>   ON e2.employee_id = e1.employee_id
> WHERE e1.DEPARTMENT_ID = 20;
> 
> *ao invés de (o script abaixo funciona no Oracle)*:
> UPDATE hr.employees e1
> SET job_id = ( SELECT e2.job_id
> FROM hr.employees e2
> WHERE e2.employee_id = e1.employee_id)
> WHERE e1.DEPARTMENT_ID = 20;
> 
> []s
> 
> Fábio Prado
> http://www.fabioprado.net
> 
> 
> Em 2 de outubro de 2013 10:01, J. Laurindo Chiappa
> <jlchiappa@...>escreveu:
> 
> > **
> >
> >
> > Na verdade depende ** exatamente ** do que o colega lá deseja : como eu
> > mostrei na minha msg anterior na thread, se ele quer um UPDATE em que os
> > valores a setar venham de um JOIN é possível SIM, de modo direto, OU se ele
> > quer fazer um UPDATE em múltilas tabelas e/ou atualizar os dados que vêm de
> > um relacionamento (JOIN) é TAMBÉM totalmente possível, usa-se a própria
> > query que contém o JOIN como target do UPDATE, dei uns links que mostram
> > exemplos para isso...
> >
> > []s
> >
> > Chiappa
> >
> > --- Em oracle_br@yahoogrupos.com.br, Fabio Prado <fbifabio@> escreveu
> > >
> > > Silvelmar,
> > >
> > > No Oracle não dá para fazer um UPDATE com JOIN. Se vc está fazendo esta
> > > pergunta, acredito que vc já trabalhou com outro BD em que o dialeto
> > > daquele banco permite fazer tal coisa, pois já vi isso no SQL Server.
> > >
> > > No Oracle vc alcançará o mesmo resultado escrevendo um SQL (e não query)
> > > com o UPDATE correlacionado, como no exemplo abaixo:
> > >
> > > UPDATE hr.employees e1
> > > SET job_id = ( SELECT e2.job_id
> > > FROM hr.employees e2
> > > WHERE e2.employee_id = e1.employee_id)
> > > WHERE DEPARTMENT_ID = 20;
> > >
> > >
> > > Att,
> > >
> > > Fábio Prado
> > > http://www.fabioprado.net
> > >
> > >
> > >
> > >
> > >
> > > Em 1 de outubro de 2013 16:42, Silvelmar Martins Gois
> > > <silvelmar@>escreveu:
> > >
> > > > **
> > > >
> > > >
> > > > Boa tarde a todos!****
> > > >
> > > > ** **
> > > >
> > > > Gostaria de ter um exemplo de uma query que faça UPDATE no oracle e que
> > > > tenha JOIN.****
> > > >
> > > > ** **
> > > >
> > > > Agradeço antecipadamente****
> > > >
> > > > ** **
> > > >
> > > > Silvio.****
> > > >
> > > > ** **
> > > >
> > > > *De:* oracle_br@yahoogrupos.com.br [mailto:
> > oracle_br@yahoogrupos.com.br] *Em
> > > > nome de *J. Laurindo Chiappa
> > > > *Enviada em:* quarta-feira, 24 de abril de 2013 20:14
> > > > *Para:* oracle_br@yahoogrupos.com.br
> > > > *Assunto:* [oracle_br] Re: Existe algum insert que segura a inserção de
> > > > dados na tabela inserida****
> > > >
> > > > ** **
> > > >
> > > > ****
> > > >
> > > > E só complementando : execuções paralelas visam principalmente a
> > diminuir
> > > > o tempo de processamento, e CLARO que sempre existe a possibilidade
> > de, ao
> > > > invés de vc ter n sessões simultâneas cada uma lendo um arquivo, via
> > > > EXTERNAL TABLE com parallel SQL vc poderia ter n slave sessions
> > > > lendo/processando/inserindo dados do MESMO arquivo, que logicamente ia
> > > > terminar de ser processado mais rápido e aí mais rapidamente ia ler o
> > > > próximo... Processando-se um arquivo por vez Elimina-se a necessidade
> > de
> > > > controle que é necessária se vc for processar múltiplos arquivos....
> > > >
> > > > []s
> > > >
> > > > Chiappa
> > > > --- Em oracle_br@yahoogrupos.com.br, "J. Laurindo Chiappa" <jlchiappa@
> > >
> > > > escreveu
> > > > >
> > > > > Colega, veja bem : é um FATO que que, se vc abre várias SESSÕES num
> > > > RDBMS, naturalmente os dados inseridos por uma SESSÂO x mas ainda não
> > > > comitados ** não ** podem/não vão poder ser 'enxergados' por uma outra
> > > > sessão y, EM ESPECIAL no RDBMS Oracle aonde nunca, jamais, em tempo
> > algum,
> > > > existe leitura "suja", de dados não comitados em outra sessão.... SE a
> > > > pessoa não conhece conceitos tão fundamentais e está desenvolvendo um
> > > > aplicativo com RDBMS, my god.....
> > > > > Bom, sobre o seu cenário de ter diversos arquivos de dados a
> > carregar em
> > > > paralelo (em SESSÔES diferentes no database) temos que :
> > > > >
> > > > > a. se existe INTEGRIDADE DE DADOS (por exemplo, constraints de PK/FK)
> > > > entre dados de diferentes arquivos, OU vc assegura que os arquivos com
> > as
> > > > PKs serão processados/inseridos primeiro, OU vc temporariamente
> > (durante a
> > > > carga) desliga as constraints e as religa no final da carga
> > (verificando os
> > > > dados antes, é claro) OU se viável usa delayed constraints
> > > > >
> > > > > b) se o problema é que a sessão x está carregando o arquivo 1 e nesse
> > > > momento entra uma sessão y que tenta carregar o mesmo arquivo, CLARO
> > que
> > > > para o database isso são sessões DIFERENTES : para vc controlar isso,
> > vc
> > > > TEM que colocar na procedure uma "inteligência" que registre que o
> > arquivo
> > > > está sendo processado, e portanto a sessão y TEM que "pular" ele - a
> > > > maneira COMUM no RDBMS Oracle é ter uma tabela de controle que vc locka
> > > > (LOCK é o meio de se assegurar acesso serializado, uma sessão por vez,
> > a um
> > > > dado recurso)...
> > > > > Poderia existir uma tabela LISTA_DE_ARQUIVOS, com uma coluna só
> > > > NOME_DO_ARQUIVO, e essa tabela ser carregada num pré-processamento com
> > a
> > > > lista toda dos arqs a carregar, aí a procedure teria uma lógica tipo :
> > > > >
> > > > > BEGIN
> > > > > for r in (select nome_do_arquivo from LISTA_DE_ARQUIVOS FOR UPDATE
> > SKIP
> > > > LOCKED) loop
> > > > > ...
> > > > > lê o arquivo registrado na coluna NOME_DO_ARQUIVO e faz os INSERTs
> > > > necessários
> > > > > ...
> > > > > delete from LISTA_DE_ARQUIVOS where current of;
> > > > > end loop;
> > > > > commit;
> > > > > END;
> > > > >
> > > > >
> > > > > okdoc ?? Aí se uma sessão y ser disparada enquanto uma sessão x está
> > > > lendo um dado arquivo 1, a linha correspondente à ele está LOCKADA e
> > > > portanto vai ser pulada e a sessão vai processar o arquivo 2....
> > > > >
> > > > > ==> é CLARO, eu estou supondo que o que vc quer é evitar que as
> > próximas
> > > > sessões processem o mesmo arquivo : não há necessidade, imagino, de
> > usar a
> > > > restrição mais rígida que vc cita (ie, PROIBIR as próximas sessões de
> > > > executarem enquanto a sessão x inicial tá rodando), MAS é plenamente
> > > > possível se fazer isso, aí vc usaria um LOCK TABLE numa tabela de
> > flag...
> > > > >
> > > > > []s
> > > > >
> > > > > Chiappa
> > > > >
> > > > > OBS : é claro, vc tem que ter CERTEZA que não há os mesmos dados,
> > com a
> > > > mesma chave, em arquivos diferentes : é ULULANTEMENTE óbvio e
> > conhecido que
> > > > se duas sessões fizerem simultaneamente INSERTs do mesmo dado com a
> > mesma
> > > > chave, em condições normais de uso (ie, constraints não-delayed, etc)
> > uma
> > > > delas (a segunda, normalmente) VAI ficar em WAIT, sim ??? E esse WAIT
> > só
> > > > será satisfeito quando a sessão original comitar, só então a
> > constraint vai
> > > > ser ativada e o registro é rejeitado com duplicated key....
> > > > >
> > > > > --- Em oracle_br@yahoogrupos.com.br, Carlos Silva <carlos-csilva@>
> > > > escreveu
> > > > > >
> > > > > > Ola pessoa!
> > > > > > Estou usando o oracle 10g ... Tenho uma procedure que recebi via
> > > > webservice arquivos, segundo informação de um rapaz que trabalha
> > comigo,
> > > > ele abre varias seções no oracle, e quando entra a primeira informação
> > já
> > > > entra a segunda, e essa segunda não consegue achar as informações da
> > > > primeira que nao foi processada ainda. Existe alguma forma de
> > controlar a
> > > > linha de chegada dessas informações. Tipo, enquanto nao foi dado
> > commit no
> > > > primeiro insert nao entrar nenhum registro na procedure ou insert.
> > > > > > At.:
> > > > > >
> > > > > > [As partes desta mensagem que não continham texto foram removidas]
> > > > > >
> > > > >****
> > > >
> > > > ****
> > > >
> > > >
> > > >
> > >
> > >
> > >
> > > --
> > > Fábio Prado
> > > www.fabioprado.net
> > > "Compartilhando conhecimentos e treinando profissionais em Bancos de
> > Dados
> > > Oracle"
> > >
> >
> >  
> >
> 
> 
> 
> -- 
> Fábio Prado
> www.fabioprado.net
> "Compartilhando conhecimentos e treinando profissionais em Bancos de Dados
> Oracle"
>


Responder a