Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

PauloTI

BULK/BIND- Oracle

Recommended Posts

Boa tarde pessoal.

 

Vamos la.. assim esse BLOCO PL/SQL abaixo mostra a diferença de tempo entre um " For loop " e um "ForAll" ganhando performance em tempo ok.. parece que só é possível em " Insert, Update, e Delete " OK

 

Gostaria de saber se é possível por exemplo ( eu faço um select PUXANDO "CÓDIGO" E "NOME" ) e inserir esses dados em uma tabela temporária.. usando esse ganho de performance do ForAll..

 

Se sim.. alguém poderia me dar um exemplo de como funciona?

 

 

Obrigado.

 

att.

 

DECLARE
TYPE L_NUM   IS TABLE OF NUMBER        INDEX BY BINARY_INTEGER;
TYPE L_CHAR  IS TABLE OF VARCHAR2(200) INDEX BY BINARY_INTEGER;

WCD_LISTA   L_NUM;
WTX_LISTA   L_CHAR;

T1          NUMBER;
T1F         NUMBER;
T2          NUMBER;
T2F         NUMBER;




BEGIN

  -- PREENCHE AS TABELAS EM MEMORIA --

  FOR I IN 1..90000 LOOP
    WCD_LISTA(I) := I;
    WTX_LISTA(I) := 'TEXTO DA LINHA '||TO_CHAR(I);
    END LOOP;
  -- INCLUI AS LINHAS NA TABELA USANDO FOR LOOP --
  SELECT TO_CHAR(CURRENT_TIMESTAMP,'SSSSS') INTO T1 FROM DUAL;
  FOR I IN 1..90000 LOOP
    INSERT INTO LISTA VALUES(WCD_LISTA(I),WTX_LISTA(I));
    END LOOP;
  SELECT TO_CHAR(CURRENT_TIMESTAMP,'SSSSS') INTO T1F FROM DUAL;
  COMMIT;
  -- INCLUI AS LINHAS NA TABELA USANDO FORALL
  SELECT TO_CHAR(CURRENT_TIMESTAMP,'SSSSS') INTO T2 FROM DUAL;
  FORALL I IN 1..90000
    INSERT INTO LISTA VALUES(WCD_LISTA(I),WTX_LISTA(I));
  SELECT TO_CHAR(CURRENT_TIMESTAMP,'SSSSS') INTO T2F FROM DUAL;  
  COMMIT;

  DBMS_OUTPUT.PUT_LINE(' TEMPO DE INSERT COM FOR LOOP = '||TO_CHAR(T1F - T1)||CHR(10)||
                       ' TEMPO DE INSERT COM FORAAL = '||TO_CHAR(T2F - T2));

END;

Compartilhar este post


Link para o post
Compartilhar em outros sites

A Oracle Magazine está publicando uma série de artigos (do Steven Feuerstein) do uso de records/bulk etc.

 

http://www.oracle.com/technetwork/oramag/magazine/tech-articles/index.html?origref=http://www.oracle.com/technetwork/oramag/magazine/home/index.html

 

Veja a documentação também do uso de uma GLOBAL TEMPORARY TABLE

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.