首页 > 解决方案 > Oracle PL/SQL:搜索记录类型值

问题描述

我正在使用 Oracle 11G。假设我将数据加载到ROWTYPE.

emp_tab如果我只是作为参数传递id而不使用任何 LOOP,如何从集合中提取名称或年龄?

  create table emp (id number, name varchar2(20), age number);
  insert into emp values(10,'Tom',20);
  insert into emp values(20,'Nicole',30);
  commit;
  select * from emp;

declare
       TYPE emp_t IS TABLE OF emp%ROWTYPE INDEX BY PLS_INTEGER;
       emp_tab emp_t;
begin
       select id,name,age bulk collect into emp_tab from emp;
           for idx in 1..emp_tab.count loop
           dbms_output.put_line(emp_tab(idx).name);
       end loop;
end;

标签: oracleplsqlcollections

解决方案


您需要按 索引您的收藏emp.id,并填充它您不能使用bulk collect(至少不是在 11g 中 - 它可能在20c中是可能的)。

declare
    type emp_t is table of emp%rowtype index by pls_integer;
    emp_tab emp_t;
    
    idx emp.id%type;
begin
    for r in (
        select id, name, age
        from   emp
    )
    loop
        emp_tab(r.id).name := r.name;
        emp_tab(r.id).age := r.age;
    end loop;

    idx := emp_tab.first;

    while idx is not null loop
        dbms_output.put_line(emp_tab(idx).name);
        idx := emp_tab.next(idx);
    end loop;
end;

推荐阅读