BULK/BIND- Oracle
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;Discussão (1)
Carregando comentários...