Bulk Collect Oracle

Pessoal, boa tarde.

Hoje gostaria de falar sobre o desempenho do Bulk Collect.

O que é melhor? Bulk ou Cursor?  Bom, num exemplo simples eu deixo a resposta para vocês, mas gostaria de reforçar: “Exemplo SIMPLES”.

Pois bem, se alguém puder enriquecer essa dicussão por favor, fique a vontade.

O teste consiste em criar uma tabela com 100.000 registros e deletá-los um a um, utilizando Bulk ou Cursor e comparar os resultados.

--CRIAR TABELA
create table tab_teste as
select level cod, dbms_random.string('a', 30) texto from dual connect by level <= 100000;

--CRIAR PROCEDURE COM BULK
CREATE OR REPLACE PROCEDURE TESTE_BULK1 IS
TYPE RIDDEMANDA IS TABLE OF ROWID;

DEMANDARID RIDDEMANDA := RIDDEMANDA();
BEGIN
SELECT ROWID BULK COLLECT INTO DEMANDARID FROM TAB_TESTE;

FORALL i in DEMANDARID.first .. DEMANDARID.last
DELETE
FROM TAB_TESTE
WHERE COD = (SELECT COD FROM TAB_TESTE D WHERE D.ROWID = DEMANDARID(I));

END;

--CRIAR PROCEDURE COM CURSOR
CREATE OR REPLACE PROCEDURE TESTE_BULK2 IS

TYPE RIDDEMANDA IS TABLE OF ROWID;
DEMANDARID RIDDEMANDA := RIDDEMANDA();
BEGIN

for c in (SELECT ROWID I FROM TAB_TESTE)
loop
DELETE
FROM TAB_TESTE
WHERE COD = (SELECT COD FROM TAB_TESTE D WHERE D.ROWID = C.I);
end loop;

END;

Mais links? Mais testes? Divirtam-se:

http://venzi.wordpress.com/2007/09/27/bulk-collect-forall-vs-cursor-for-loop/

http://oradeep.wordpress.com/2011/12/12/oracle-collections-bulk/

Confira meu perfil profissional no LinkedIn e faça parte da minha rede. https://lnkd.in/w9kyFR

Abraços,
Bruno F. Antognolli

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s