Oracle之循环

循环 loop 无限循环,需要退出条件 declare begin loop 开始 循环体 要循环的内容 控制循环体次数 ///控制循环几次 exit when //满足什么条件的时候提出循环 end loop; end; 例题:打印10次helloword declare v_a varchar2(30); n number:=0; begin v_a:='helloword'; loop dbms_output.out_line('helloword'); n:=n+1; exit when n=10; end loop; end; 当exist when放在n:=n+1前面时,打印11次 练习: 打印输出1-100 declare n number:=1; begin loop dbms_output.put_line(n); n:=n+1; exit when n=101; end loop; end; while循环//有条件的循环,满足条件进入循环 语法: declare begin while 条件 ///满足条件进入循环 loop ///循环的开始 循环体 要循环的内容 控制循环体次数 //控制次数 end loop; //当不满足while后面条件退出 end; 例题:打印10次helloword declare n number:=1; begin while n<11 loop dbms_output.put_line('helloword'); n:=n+1; end loop; end; 练习: 打印输出1-100 declare n number:=1; begin while n<101 loop dbms_output.put_line(n); n:=n+1; end loop; end; for循环 declare begin for 变量名 声明变量名 in x..y /游标 /(sql语句 变量接收的内容 X..Y:表示从x到y,x和y必须是整数,并且x必须小于y loop 循环的开始 循环体 要循环的内容 end loop; 循环结束 end; 例题:打印10次helloword declare begin for i in 1..10 loop dbms_output.put_line('helloword'); end loop; end; 练习 打印输出1declare declare begin for i in 1..100 loop dbms_output.put_line(i); end loop; end; 反转 in reverse x..y 例题输入一个字符串反向输出 方法1 declare v_a varchar2(30):='&输入'; begin for i in reverse 1..length(v_a) loop dbms_output.put(substr(v_a,i,1)); end loop; dbms_output.put_line(''); end; 方法2 DECLARE V_A VARCHAR2(30):='&NAME'; V_B VARCHAR2(30); BEGIN LOOP IF LENGTH(V_A)<>0 THEN SELECT SUBSTR(V_A,-1,1) INTO V_B FROM DUAL; DBMS_OUTPUT.PUT(V_B); V_A:=SUBSTR(V_A,1,LENGTH(V_A)-1); ELSE DBMS_OUTPUT.PUT_LINE(' '); EXIT WHEN V_A IS NULL; END IF; END LOOP; END; for后面放sql语句 例题:打印输出每个部门的每个员工的姓名,工作 declare begin for i in (select deptno from dept) loop dbms_output.put_line(i.deptno||'号部门的员工'); for j in (select ename,job from emp where deptno=i.deptno) loop dbms_output.put_line('姓名'||j.ename||'岗位'||j.job); end loop; end loop; end; 注意: 1.sql语句用括号括起来 2.sql还是正常sql 3.for循环接收的可以是多个列,相当于复合变量 循环的嵌套 外层循环执行一次,内层循环会全部执行完毕,外循环再走第二次 游标:本质上是一个指针,指向数据库查询出来的结果集的每一行数据,初始指向第一行数据 功能:处理多行数据 分类: 显式游标 语法: declare cursor 游标名 is sql 语句;定义游标 begin open 游标名; 打开游标 fetch 游标名 into 变量 ; 提取游标指向数据交给变量,然后指针下移 /游标大多是配合循环使用 close 游标名; 关闭游标 end; 例题: 打印输出10号部门的所有人的姓名和工作 declare cursor cl is select ename,job from emp where deptno=10; v_ename varchar2(30); v_job varchar2(30); begin open cl; fetch cl into v_ename,v_job; dbms_output.put_line(v_ename||v_job); exit when cl%notfound; end loop; close cl; end; 例题: 打印输出10号部门的所有人的姓名和工作loop循环处理游标 declare cursor cl is select ename,job from emp where deptno=10; v_ename varchar2(30); v_job varchar2(30); begin open cl; loop fetch cl into v_ename,v_job; dbms_output.put_line(v_ename||v_job); exit when cl%notfound; end loop; close cl; end;/当这样子最后一个人打印了两次,将exit when与打印互换 例题: 打印输出10号部门的所有人的姓名和工作while循环处理游标 declare cursor cl is select ename,job from emp where deptno=10; v_ename varchar2(30); v_job varchar2(30); begin open cl; fetch cl into v_ename,v_job; while cl%found loop dbms_output.put_line(v_ename||v_job); fetch cl into v_ename,v_job; end loop; close cl; end; 例题: 打印输出10号部门的所有人的姓名和工作for循环处理游标 //自动打开关闭游标自动fetch游标 declare cursor cl is select ename,job from emp where deptno=10; begin for i in cl loop dbms_output.put_line(i.ename||i.job); end loop; end; cursor cur(dno number defaule 20,v_sal number) is select /(名 类型 默认值) dbms_output.put_line(cl%rowcount)多少个数据 declare begin if cl%isopen then dbms_output.put_line('打开'); else open cl; end if; loop end loop; end; 隐式游标 针对dml语句,所有的隐式游标名字统一:sql dclare begin update emp set sal=1000 where deptno=10; dbms_output.put_line(sql%rowcount); end; 游标属性: 1.%found 当游标有结果的时候返回ture 2.%notfound 当游标没有结果的时候返回ture 3.%isopen 判断游标是否打开 4.%rowcount 返回一个数值,游标处理了多少行记录

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值