O BULK COLLECT reduz as alternâncias de contexto entre o mecanismo SQL e PL / SQL e permite que o mecanismo SQL busque os registros de uma vez.
O Oracle PL / SQL fornece a funcionalidade de buscar os registros em massa, em vez de buscar um por um. Este BULK COLLECT pode ser usado na instrução 'SELECT' para preencher os registros em massa ou para buscar o cursor em massa. Como BULK COLLECT busca o registro em BULK, a cláusula INTO deve sempre conter uma variável de tipo de coleção. A principal vantagem de usar o BULK COLLECT é aumentar o desempenho reduzindo a interação entre o banco de dados e o mecanismo PL / SQL.
Sintaxe:
SELECT BULK COLLECT INTO bulk_varaible FROM
;FETCH BULK COLLECT INTO ;
Na sintaxe acima, BULK COLLECT é usado na coleta de dados das instruções 'SELECT' e 'FETCH'.
Neste tutorial, você aprenderá-
Cláusula FORALL
Cláusula LIMIT
Atributos de COLETA EM GRANEL
Cláusula FORALL
O FORALL permite realizar operações DML em dados em massa. É semelhante ao da instrução de loop FOR, exceto no loop FOR que as coisas acontecem no nível de registro, enquanto em FORALL não há conceito de LOOP. Em vez disso, todos os dados presentes no intervalo determinado são processados ao mesmo tempo.
Sintaxe:
FORALL in… ;
Na sintaxe acima, a operação DML fornecida será executada para todos os dados presentes entre os intervalos inferior e superior.
Cláusula LIMIT
O conceito de coleta em massa carrega todos os dados na variável de coleção de destino como um volume, ou seja, todos os dados serão preenchidos na variável de coleção de uma só vez. Mas isso não é aconselhável quando o registro total que precisa ser carregado é muito grande, porque quando o PL / SQL tenta carregar todos os dados, ele consome mais memória da sessão. Portanto, é sempre bom limitar o tamanho dessa operação de coleta em massa.
No entanto, esse limite de tamanho pode ser facilmente alcançado introduzindo a condição ROWNUM na instrução 'SELECT', enquanto no caso do cursor isso não é possível.
Para superar isso, a Oracle forneceu a cláusula 'LIMIT' que define o número de registros que precisam ser incluídos no bulk.
Sintaxe:
FETCH BULK COLLECT INTO LIMIT ;
Na sintaxe acima, a instrução de busca do cursor usa a instrução BULK COLLECT junto com a cláusula LIMIT.
Atributos de COLETA EM GRANEL
Semelhante aos atributos do cursor, BULK COLLECT tem% BULK_ROWCOUNT (n) que retorna o número de linhas afetadas na enésima instrução DML da instrução FORALL, ou seja, ele fornecerá a contagem de registros afetados na instrução FORALL para cada valor da coleção variável. O termo 'n' indica a sequência de valores na coleção, para a qual a contagem de linhas é necessária.
Exemplo 1 : Neste exemplo, projetaremos todos os nomes dos funcionários da tabela emp usando BULK COLLECT e também aumentaremos o salário de todos os funcionários em 5000 usando FORALL.
DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;TYPE lv_emp_name_tbl IS TABLE OF VARCHAR2(50);lv_emp_name lv_emp_name_tbl;BEGINOPEN guru99_det;FETCH guru99_det BULK COLLECT INTO lv_emp_name LIMIT 5000;FOR c_emp_name IN lv_emp_name.FIRST… lv_emp_name.LASTLOOPDbms_output.put_line(‘Employee Fetched:‘||c_emp_name);END LOOP:FORALL i IN lv_emp_name.FIRST… lv emp_name.LASTUPDATE emp SET salaiy=salary+5000 WHERE emp_name=lv_emp_name(i);COMMIT; Dbms_output.put_line(‘Salary Updated‘);CLOSE guru99_det;END;/