如何在嵌套表中使用PL / SQL记录数据类型?

我有一个嵌套表,其中包含记录数据类型。 所以我尝试了:

DeclARE
  TYPE my_nested_table   IS TABLE OF ot.employee%ROWType;
  var_nt  my_nested_table :=  my_nested_table ();

  cursor cur is 
  select * from ot.employee;

BEGIN
 for i in cur
 loop
 var_nt.extend;
  end loop;

END;
/

employee具有empno,empname,job columns。我正在执行的过程是错误的还是可以将此记录存储在嵌套表中?我在编译此代码时没有任何错误。如何将所有这些游标值添加到嵌套表变量并打印它们?

mql7777 回答:如何在嵌套表中使用PL / SQL记录数据类型?

  

如何将所有这些游标值添加到嵌套表变量中,以及   打印它们?

使用LOOP可以如下所示一个一个地分配值: 使用Nested

DECLARE
  TYPE my_nested_table IS  TABLE OF employee%rowtype;
  cursor cur is 
        select *
        from employee;

  var_nt   my_nested_table := my_nested_table ();
BEGIN
  for i in cur 
  loop
    var_nt.extend;        
    var_nt(var_nt.count)   := i; -- Assignment 
    --Printing. You can add the columns you want
    dbms_output.put_line(i.empno ||'-'|| i.ename||'-'||i.sal||'-'|| i.deptno);
  end loop;
END;
/

使用Associative数组:-可以避免初始化和扩展

DECLARE
  TYPE my_nested_table IS  TABLE OF employee%rowtype index by pls_integer;
  cursor cur is 
        select *
        from employee;

  var_nt   my_nested_table; -- No need to initialize
BEGIN
  for i in cur loop
    --var_nt.extend; -- No need to extend
    var_nt(var_nt.count)   := i;
    dbms_output.put_line(i.empno ||'-'|| i.ename||'-'||i.sal||'-'|| i.deptno);
  end loop;
END;
/

第二,您可以避免使用loop并直接在Nested表中获取值,如下所示:

DECLARE
  TYPE my_nested_table IS  TABLE OF employee%rowtype;
  var_nt   my_nested_table := my_nested_table ();
BEGIN
  select * 
  BULK COLLECT INTO  var_nt
  from employee;

  for i in 1..var_nt.count Loop
    dbms_output.put_line('Employee No. - '||var_nt(i).empno||'  '||'Employee Name - '||var_nt(i).ename);
  end loop;

END;
/
,

不确定我是否理解,但是您可以这样做:

DECLARE

  CURSOR c_data IS
    SELECT *
    FROM employee;
  tmp_event c_data%rowtype;

BEGIN
  OPEN c_data;
  LOOP
    FETCH c_data INTO tmp_event;
    EXIT WHEN c_data%NOTFOUND;
    dbms_output.put_line(tmp_event.id);
  END LOOP;
  CLOSE c_data;
END;
/

这里是DEMO

本文链接:https://www.f2er.com/3157796.html

大家都在问