如何使用游标 plsql 插入嵌套 table 集合
how to insert into nested table collection using cursor plsql
我正在编写一个需要同时操作多行的函数,并且需要对它们进行索引。在阅读了 Oracle pl/sql 几个小时后,我想我可以创建一个嵌套的 table 类集合。由于我找不到明确的答案,并且 trial/error 方法需要很长时间。
下面是问题部分:
问题:填充嵌套 table 集合的最佳做法是什么?甲骨文 PL/SQL
type partsTable is table of Parts_north_wing%rowtype;
pt PartsTable;
index number;
cursor pCursor is select * from Parts_north_wing;
begin
index := 1;
open pCursor;
loop
fetch pCursor into tempRow;
pt(index) := tempRow;
index := index + 1;
exit when pCursor%notfound;
end loop;
close pCursor;
游标 FOR LOOP 几乎总是处理 PL/SQL 中行的最佳方式。它比 OPEN/FETCH/CLOSE 方法更简单——不需要声明变量和操作游标。它也更快,因为它会自动批量收集结果。
begin
for pt in
(
select parts_north_wing.*, rownum row_index
from parts_north_wing
) loop
--Do something here
null;
end loop;
end;
/
试试这个。希望这能帮助你理清一些概念。
--Create a dummy object tyep
CREATE OR REPLACE TYPE av_obj
IS
OBJECT
(
ADD1 VARCHAR2(100),
ADD2 VARCHAR2(100) );
--Create a nested tale type
CREATE OR REPLACE TYPE AV_TT
IS
TABLE OF AV_OBJ;
--Bulk collect into nested table type
DECLARE
av_nested_tab AVROY.AV_TT;
BEGIN
SELECT avroy.av_obj(LEVEL
||'add1',LEVEL
||'add2') BULK COLLECT
INTO av_nested_tab
FROM DUAL
CONNECT BY LEVEL < 10;
END;
我正在编写一个需要同时操作多行的函数,并且需要对它们进行索引。在阅读了 Oracle pl/sql 几个小时后,我想我可以创建一个嵌套的 table 类集合。由于我找不到明确的答案,并且 trial/error 方法需要很长时间。 下面是问题部分: 问题:填充嵌套 table 集合的最佳做法是什么?甲骨文 PL/SQL
type partsTable is table of Parts_north_wing%rowtype;
pt PartsTable;
index number;
cursor pCursor is select * from Parts_north_wing;
begin
index := 1;
open pCursor;
loop
fetch pCursor into tempRow;
pt(index) := tempRow;
index := index + 1;
exit when pCursor%notfound;
end loop;
close pCursor;
游标 FOR LOOP 几乎总是处理 PL/SQL 中行的最佳方式。它比 OPEN/FETCH/CLOSE 方法更简单——不需要声明变量和操作游标。它也更快,因为它会自动批量收集结果。
begin
for pt in
(
select parts_north_wing.*, rownum row_index
from parts_north_wing
) loop
--Do something here
null;
end loop;
end;
/
试试这个。希望这能帮助你理清一些概念。
--Create a dummy object tyep
CREATE OR REPLACE TYPE av_obj
IS
OBJECT
(
ADD1 VARCHAR2(100),
ADD2 VARCHAR2(100) );
--Create a nested tale type
CREATE OR REPLACE TYPE AV_TT
IS
TABLE OF AV_OBJ;
--Bulk collect into nested table type
DECLARE
av_nested_tab AVROY.AV_TT;
BEGIN
SELECT avroy.av_obj(LEVEL
||'add1',LEVEL
||'add2') BULK COLLECT
INTO av_nested_tab
FROM DUAL
CONNECT BY LEVEL < 10;
END;