【发布时间】:2019-01-03 18:45:18
【问题描述】:
我的程序如下:
cursor my_cursor is
select first_column, second_column, third_column from table_name;
TYPE my_cursor_type is TABLE OF my_cursor_type%ROWTYPE INDEX BY BINARY INTEGER;
my_cur my_cursor_type;
TYPE table_type IS TABLE OF table_name%ROW_TYPE INDEX BY BINARY INTEGER;
table_obj table_type;
begin
open my_cursor;
loop
fetch my_cursor bulk collect
into my_cur limit 5000;
exit when my_cursor%notfound;
for i in 1 .. my_cur.count loop
table_obj(i).first_column := my_cur(i).first_column;
table_obj(i).second_column := my_cur(i).second_column;
table_obj(i).third_column := my_cur(i).third_column;
end loop;
end loop;
Close my_cursor;
……
现在在这些代码之后,我有 table_obj,它有 100000 条记录。而这个表对象有first_column、second_column、third_column。
我在table_obj 中搜索一条记录的第三列。我知道first_column、second_column,我在table_obj 中搜索third_column。我必须从 table_obj 行中获取行。此搜索行具有我的 first_column、second_column 值。 我从这一行得到了third_column_value。如何使用 plsql 从 table_obj 行中获取特定行?
【问题讨论】:
-
您为什么要使用循环来填充您的 PL/SQL 表 - 为什么不将单个批量收集到
table_obj中?我不确定我是否理解你试图用你的'过滤器值做什么,或者它们来自哪里。如果您只需要与您的特定第一/第二列值匹配的数据,为什么不将过滤作为游标查询的一部分? -
我不知道,如何分配单循环。你理解正确。我不能使用 where 条件。因为我使用其他循环的表对象。即 first_value 和 second_value 每次循环迭代都会改变。
-
首先我想填充我的table_obj。因为在每个循环迭代中进行选择查询会导致性能问题。首先我要准备好数据。然后我想快速循环使用获取的数据。
-
作为旁注,看看这里为什么你会以你编码循环的方式丢失记录:livesql.oracle.com/apex/livesql/file/…。声明 4 是您所做的,它旁边是解释为什么这不起作用,并且该页面上也有工作示例。 HTH KR 彼得
标签: oracle plsql oracle-sqldeveloper plsqldeveloper