Márcia, uma correção : na verdade não é que "não há troca", a "troca" que vc menciona (context switch) SEMPRE existe - veja vc, já que SQL e PL/SQL são linguagens ABSOLUTAMENTE e RADICALMENTE diferentes, então o banco tem que ter dois engines - ie, dois "motores", dois "mecanismos executores executores" diferentes, então se num mesmo programa vc mescla SQL e PL/SQL, fatalmente o banco VAI ter que fazer uma "pausa" num dos engines, acionar o outro , depois retornar... O que as técnicas de BULK COLLECTING do PL/SQL permitem é que, ao invés do PL/SQL ter que acionar o SQL engine n vezes ele envia um array con N linhas a processar, e esse array será processado pelo SQL engine de uma vez, diminuindo em muito o context switching (ou até em tese deixando ele ser um só), mas que ele VAI continuar existindo isso é uma decorrência natural da implementação de PL/SQL como um elemento separado do SQL, o PL/SQL simplesmente NÃO SABE como processar SQL, e nem é essa a função dele, ele TERÁ que chamar o SQL engine - http://asktom.oracle.com/pls/ask/f? p=4950:8:::::F4950_P8_DISPLAYID:60122715103602 diz exatamente isso.
Daniel, seguinte : como os comandos/técnicas mencionados (BULK, COLLECT, FORALL, etc) são comandos PL/SQL, é no manual de PL/SQL que vc os encontrará e estudará, confere ? Em especial o cap. 5 - 'PL/SQL Collections and Records' no manual "PL/SQL User's Guide and Reference" os especificam em detalhes. Para mais exemplos e estudos de casos, procurando pelas citadas palavras-chaves em http://asktom.oracle.com vc achará os + DIVERSOS casos e artigos, como por exemplo http://asktom.oracle.com/pls/ask/f? p=4950:8:::::F4950_P8_DISPLAYID:8784259916366 . ===>>> Observo que , porém, que de forma alguma PL/SQL é a melhor "saída" , PL/SQL não é de forma alguma a primeira opção pensando-se em performance para manipulação de grande volume de dados : não só há questões de context switch, (tal como dito nos links que citei), como há também a questão do CBO, que é um dos pontos que vou levantar no enpo-2006 : ele (CBO) sabe otimizar SQLs e ** não ** PL/SQLs, assim se vc tiver uma rotina tipo : ... BEGIN for r in (select .....) loop ... faz alguma coisa ... select nnn from tabela where chave = r.campo-chave; ... ==> no caso acima, embora logicamente falando os dois SQLs estão relacionados, o CBO é *** INCAPAZ ** de transformar os dois SELECTs num JOIN único, então os recursos (que ás vezes são BRUTALMENTE eficientes) dum JOIN, tal como hashing, NÃO serão usados neste processamento, ele será processado (logicamente falando) como un nested loop, ie, pega a primeira linha, busca na tabela interna o registro correspondente, pega a segunda linha, busca o registro correspondnete, aí vai, vai, vai, até o fim do SELECT no for.... Então a idéia para grandes volumes é : num banco otimizado (ie, com área de rollback/undo suficientes, com o melhor armazenamento possível - com GTTs e NOLOGGING onde puder, com Paralelismo, com o SQL sendo executado LOCALMENTE no servidor Oracle, com a qtdade de linhas que a linguagem SQL processa de uma só vez otimizada de acordo com a tool/linguagem usada, etc, etc, etc) tentar fazer TODO o processamento em um comandos SQLs único : inclusive as novas features da linguagem SQL, como Analytics, cláusula WITH, etc, possibilitam que em MUITOS casos onde isso não era possível hoje em dia se possa fazer... Caso REALMENTE por qquer motivo não foi possível fazer , aí sim usar PL/SQL, aí sim com BULK. []s Chiappa --- Em oracle_br@yahoogrupos.com.br, "Marcia Bussolaro" <[EMAIL PROTECTED]> escreveu > > Oi, > > São comandos para trabalhar com grandes massas de dados, como você mencionou. A grande vantagem é que não há troca entre as máquinas PL/SQL e SQL reduzindo bastante o tempo de execução. O código fica bem mais complexo e existem algumas limitações dependendo da versão. Existem vários links na internet sobre o assunto. Você pode começar por esse que indica como passar de cursor para bulk collect e forall. > > http://www.oracle.com/technology/oramag/oracle/04- jan/o14tech_plsql.html; > > [] > Marcia > > > On Mon, 2 Oct 2006 17:42:54 +0000 (GMT), Daniel Mello <[EMAIL PROTECTED]> escreveu: > > > De: Daniel Mello <[EMAIL PROTECTED]> > > Data: Mon, 2 Oct 2006 17:42:54 +0000 (GMT) > > Para: oracle_br <oracle_br@yahoogrupos.com.br> > > Assunto: [oracle_br] Collections > > > > > > Pessoal, já houvi falar de algumas saídas para performance de grandes massas de dados através de collections (bulck collect, forall), a final o que são e onde posso encontrar mais material sobre as mesmas? > > > > Obrigado. > > > > > > ______________________ > > Daniel Mello > > [EMAIL PROTECTED] > > __________________________________________________ > > Fale com seus amigos de graça com o novo Yahoo! Messenger > > http://br.messenger.yahoo.com/ > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > -------------------------------------------------------------------------------------------------------------------------- Atenção! As mensagens deste grupo são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ --------------------------------------------------------------------------------------------------------------------------__________________________________________________________________ OPORTUNIDADES DE TRABALHO, VAGAS, EMPREGOS PARA PROFISSIONAIS ORACLE VISITE: http://www.oraclebr.com.br/ __________________________________________________________________ Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html