PLSQL中的FOR循环

 游标的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;
-------------------------------------------------

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值