游标的FOR循环,循环体是查询的表
游标的for循环
PL/SQL 语言提供了 游标 FOR 循环语句,自动执行游标的 OPEN 、 FETCH 、 CLOSE 语句和 循环 语句的功能;当进入循环时,游标 FOR 循环语句 自动 打开游标,并提取第一行游标数据,当程序处理完 当前所提取的数据而进入下一次循环时,游标 FOR 循环语句自动提取下一行数据供程序处理,当提取完结果集合中的所有数据行后结束循环,并自动关闭游标 。
FOR index_variable IN cursor_name[value[, value]…] LOOP
--游标数据处理代码
END LOOP;
index_variable 为游标 FOR 循环语句隐含声明的索引变量,该变量为 记录变量 ,其 结构与游标查询语句返回的结构集合的结构相同 。在程序中可以通过引用该索引记录变量元素来读取所提取的 游标数,index_variable 中各元素的名称与游标查询语句选择列表中所制定的列名相同。 如果在游标查询语句的选择列表中存在计算列,则必须为这些计算列指定别名后才能通过游标 FOR 循环语句中的索引变量来访问这些列数据 。
注:不要在程序中对游标进行人工操作;不要在程序中定义用于控制
--PL/SQL 在游标 FOR 循环语句之前定义游标,然后使用。
declare
cursor c_emp is select last_name,salary*10 sal
from employees;
begin
for v_emp in c_emp loop
dbms_output.put_line(v_emp.last_name||'--'||v_emp.sal);
end loop;
end;
--PL/SQL 在游标 FOR 循环语句中使用子查询来实现游标的功能。
begin
for v_emp in (select last_name,salary*10 sal from employees;)
dbms_output.put_line(v_emp.last_name||'--'||v_emp.sal);
end loop;
end;
1、知识点
格式:
for -- 开始for循环
parai -- 定义游标 也可以认为是 java中的循环变量
in(sql语句)-- 需要循环的sql结果集
loop -- 开始循环
sql逻辑 -- 此处是需要处理的sql逻辑
end loop 表示结束for循环
2、示例
set serveroutput on ;
declare
salaryD varchar2(30);
begin
-- 将emp表所有empno存到游标empnoi
for empnoi in(select empno from emp ) loop -- 循环人员
begin
select salary into salary from salaryD where empno = empnoi.empno;
end;
-- 输出,需要||拼接
dbms_output.put_line(empnoi.empno||':'||salary);
end loop;
end;
/
注意这里用到 into 用法是赋值,将salary赋值给salaryD。
循环体是单纯的数字:
/*
语法:
FOR counter IN [reverse] initial_value .. final_value LOOP
sequence_of_statements;
END LOOP;
*/
declare
--保存求和结果
sum_result integer:=0;
begin
--求从1到1000的累加和
for var in 1..1000 loop
sum_result:=sum_result+var;
end loop;
dbms_output.put_line('The result of 1..1000 is : ' || sum_result);
--使用REVERSE关键翻转顺序
for var in reverse 1..10 loop
dbms_output.put_line('The '||var || ' loop');
end loop;
end;
循环体是数据库的表中字段:
--------------循环打印a表中的id信息---------------------------------------------
begin
for aa in (select * from a where id=&id) loop
--循环体语句,打印部门信息
dbms_output.put_line(aa.id||'---'||aa.name);
end loop;
end;
-------------------------------------------------