oracle - 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;
解决方案
您需要按 索引您的收藏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;
推荐阅读
- typescript - 组合 API - vuex getters 不安全地返回“任何”类型的值
- css - 防止文本溢出
- haskell - 撤消前缀和
- excel - 仅对多维数据集的 excel 数据透视表中的某些头行使用子行
- javascript - API 日出/日落 - 从 UTC 转换为本地时间
- python - PyTorch jit 跟踪不返回命名元组作为输出
- python - 从一个随机数列表中,如何识别五个连续的数字并将它们分开在一个新的列表中?
- c++ - 为 C++ 项目创建 makefile
- javascript - 我可以添加编辑选项并使用 javascript 赋予它功能吗
- css - 屏幕变小时gridview没有响应