【Do Oracle】 É TABELA DE 和 BULK COLLECT INTO + FORALL

  • É TABELA DE: tabela especifica o tipo de matriz é um conjunto, simplesmente significa que um tipo de dados pode armazenar uma pluralidade de linhas.
  • ÍNDICE DE BINARYJNTEGER: tipos de tecidos do dedo do índice.
  • BULK COLLECT: refere-se a um tipo de polimerização em massa, simples, que pode ser armazenada numa pluralidade de linhas e colunas tipo de armazenamento, utilizando BULK resultados da consulta recolher pode ser carregado no colector descartável.

[Type] no modo SCOTT, IS TABLE OF obter os nomes de todos os empregados, trabalho, informação do salário.

declare
  type type_ename is table of emp.ename%type;
  type type_job is table of emp.job%type;
  type type_sal is table of emp.sal%type;
  
  var_ename type_ename:=type_ename();
  var_job type_job:=type_job();
  var_sal type_sal:=type_sal();
begin
  select ename,job,sal
  bulk collect into var_ename,var_job,var_sal
  from emp;
  
  /*输出雇员信息*/
  for v_index in var_ename.first .. var_ename.last loop
      dbms_output.put_line('雇员名称:'||var_ename(v_index)||' 职务:'||var_job(v_index)||' 工资:'||var_sal(v_index));
  end loop;
end;

[] No modo SCOTT rowtype, IS TABLE OF obter todas as informações de todos os funcionários.

declare
   type emp_table_type is table of emp%rowtype index by binary_integer;
   var_emp_table emp_table_type;
begin
  select *
  bulk collect into var_emp_table
  from emp;
  
  /*输出雇员信息*/
  for i in 1..var_emp_table.COUNT loop
      dbms_output.put_line('雇员名称:'||var_emp_table(i).ename||' 职务:'||var_emp_table(i).job||' 工资:'||var_emp_table(i).sal);
  end loop;
end;

No desenvolvimento Oracle, que às vezes usar o BULK COLLECT INTO operações em massa de grandes quantidades de dados, se nenhum limite LIMIT, o Oracle lê todas as linhas consultas na memória, é fácil causar PGA resultados estouro em um erro. Assim, limitar o uso de palavras-chave PGA evitar transbordamento.

SQL> DECLARE
  2    TYPE typ_emp IS TABLE OF emp%ROWTYPE INDEX BY PLS_INTEGER;
  3    v_emp typ_emp;
  4
  5    v_emp_id   tab_emp_id;
  6    v_total_id tab_emp_id := tab_emp_id();
  7
  8    v_limit NUMBER := 3;
  9
 10    v_test emp%ROWTYPE;
 11
 12    CURSOR cur_emp IS
 13      SELECT * FROM emp;
 14  BEGIN
 15    OPEN cur_emp;
 16
 17    LOOP
 18      FETCH cur_emp BULK COLLECT
 19        INTO v_emp LIMIT v_limit;
 20
 21      FORALL j IN v_emp.first .. v_emp.last
 22        INSERT INTO t_emp
 23        VALUES
 24          (seq_emp.nextval,
 25           v_emp(j).ename)
 26        RETURNING id BULK COLLECT INTO v_emp_id;
 27
 28      v_total_id := v_total_id MULTISET UNION ALL v_emp_id;
 29      EXIT WHEN v_emp.count < v_limit;
 30
 31    END LOOP;
 32
 33    CLOSE cur_emp;
 34
 35    FOR rec IN (SELECT *
 36                  FROM t_emp
 37                 WHERE id IN (SELECT column_value FROM TABLE(v_total_id)))
 38    LOOP
 39      dbms_output.put_line(rec.id || '---------->' || rec.name);
 40    END LOOP;
 41
 42    COMMIT;
 43
 44  END;
 45  /

86---------->SMITH_甯
87---------->ALLEN
88---------->WARD
89---------->JONES
90---------->MARTIN
91---------->BLAKE
92---------->CLARK
93---------->SCOTT
94---------->KING
95---------->TURNER
96---------->ADAMS
97---------->JAMES
98---------->FORD
99---------->MILLER

PL/SQL procedure successfully completed.

referência:

" O Oráculo de usar o IS TABLE OF "
" as aplicações Oracle as operações em massa BULK COLLECT INTO "

Publicado 107 artigos originais · Louvor obteve 88 · vista 260 000 +

Acho que você gosta

Origin blog.csdn.net/Code_shadow/article/details/103518472
Recomendado
Clasificación