我有一个Emp Emp,Empname,薪水表Emp,我正在努力为每个员工做一个计算.但是我在尝试迭代每个emp来进行计算时遇到问题.我不能使用显式的游标.
所以现在我只是想创建empID列表:
Declare aRows Number; eid emp_ID%TYPE; Begin Select Count(*) Into aRows from emp; Select emp_ID Into eid From emp; FOR days IN 1..Tot_Rows Loop Dbms_Output.Put_Line(eid); eid := eid + 1; End Loop; END;
在PL / sql中迭代表中的行的最简单的方法是执行类似的操作
BEGIN FOR employees IN (SELECT emp_id FROM emp) LOOP dbms_output.put_line( employees.emp_id ); END LOOP; END;
或者,您可以将所有EID值提取到PL / sql集合中,并在该示例中迭代集合
DECLARE TYPE emp_id_tbl IS TABLE OF emp.emp_id%type; l_emp_ids emp_id_tbl ; BEGIN SELECT emp_id BULK COLLECT INTO l_emp_ids FROM emp; FOR i IN l_emp_ids .FIRST .. l_empnos.LAST LOOP dbms_output.put_line( l_emp_ids (i) ); END LOOP; END;
如果您的查询可以返回数千行,则将所有数据提取到集合中可能会使用比您想要的更多的PGA内存,并且您可能需要使用LIMIT子句来获取块中的行.但是,在这一点上,似乎已经超越了我们自己.