2016-04-25 57 views
0

我正在写一个函数,需要同时处理多个行,并且他们需要进行索引。经过几个小时的阅读关于Oracle pl/sql,我想我可以创建一个嵌套表类型的集合。由于我找不到明确的答案,并且试验/错误方法需要长时间。 这是问题部分: 问题:填充嵌套表集合的最佳实践是什么?甲骨文的PL/SQL如何使用游标插入到嵌套表集合plsql

 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; 
+0

我相信,最有效的方法是在你的光标上使用'BULK COLLECT INTO'子句或者选择,例如, OPEN pCursor; FETCH pCursor BULK COLLECT INTO pt;关闭pCursor;'。 – AndrewMcCoist

回答

2

游标for循环几乎总是要处理在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; 
/
+0

明白了。所以这是循环语句的隐式游标。很方便。 http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/cursor_for_loop_statement.htm#LNPLS1155 –

0

试试这个。希望这可以帮助你清除你的一些概念。

--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;