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 <mailto:oracle_br%40yahoogrupos.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
<mailto:oracle_br%40yahoogrupos.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]
> >
>



Responder a