Bulk Collect

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Pessoal, bom dia.
Estou com uma dúvida sobre Bulk Collect.

Seguinte, ouvi dizer q ele é utilizado em "gravação" (DML's) e, que é bem mais rápido que utilização de cursor normal, principalmente em se tratando de grande quantidade de registros.

Minha dúvida é a seguinte:

-Esta agilidade, é devido o Bulk inserir todos os valores no vetor de uma única vez e, realizar esta gravação em lote também?

Muito obrigado,
emanuel.estumano
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Ter, 14 Nov 2006 12:38 pm
Localização: Belém - Pa

Na verdade o BULK COLLECT é utilizado para consulta. Serve basicamente para você poder utilizar a cláusula INTO em um cursor implícito sem medo de levantar uma exceção too_many_rows, atribuindo todos os valores de retorno a variáveis do tipo nested table pré-declaradas. Já em um cursor explícito, você pode associar a cláusula LIMIT N, onde N é o número limite de registros que a consulta irá realizar o fetch, diminuindo assim a sobrecarga de processamento no servidor de banco de dados. As associações que você pode fazer a estes comandos são diversas, sem falar que a utilidade deles é incrível, sem falar no código bem mais elegante! 8)
Mas acho que o que você comentou foi sobre o BULK INSERT.
Ele utiliza o comando FORALL, funciona da seguinte maneira: ao invés de você inserir um a um os registros (como acontece dentro de um laço FOR normal) ele te permite inserir todos os registros de uma só vez no banco, passando como valores das colunas variáveis do tipo nested table de tipo idêntico aos da coluna referenciada. Com isso você ganha performance porque utiliza um comando nativo pl/sql e tem um código bastante elegante.
Segue um exemplo de código para você poder visulizar melhor:

forall i in array_identificador.first .. array_identificador.count
insert into tabela (identificador, nome)
values(array_identificador(i), array_nome(i));


Espero ter ajudado! :wink:

Forte abraço

Emanuel Estumano
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes