PauloTI 0 Denunciar post Postado Novembro 8, 2012 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
Motta 645 Denunciar post Postado Novembro 8, 2012 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