Oracle-day04 中
(六)循环
1.无条件循环 语法结构 loop --循环语句 end loop; 范例:输出从1开始的100个数 declare v_num number:=1; begin loop dbms_output.put_line(v_num); v_num:=v_num+1; exit when v_num>100; end loop; end ; 2、条件循环 while 条件 loop end loop; 范例:输出从1开始的100个数 declare v_num number:=1; begin while v_num<=100 loop dbms_output.put_line(v_num); v_num:=v_num+1; end loop; end ; 3、for循环 for 变量 in 起始值..终止值 loop end loop; 范例:输出从1开始的100个数 begin for v_num in 1..100 loop dbms_output.put_line(v_num); end loop; end; (七)游标 2.语法结构及示例
open 游标名称 loop fetch 游标名称 into 变量 exit when 游标名称%notfound end loop; close 游标名称 需求:打印业主类型为 1 的价格表 declare v_pricetable T_PRICETABLE%rowtype;--价格行对象 cursor cur_pricetable is select * from T_PRICETABLE where ownertypeid=1;--定义游标 begin open cur_pricetable;--打开游标 loop fetch cur_pricetable into v_pricetable;--提取游标到变量 exit when cur_pricetable%notfound;--当游标到最后一行下面退 出循环 dbms_output.put_line( ‘价格:‘ ||v_pricetable.price ||‘吨位: ‘||v_pricetable.minnum||‘-‘||v_pricetable.maxnum ); end loop; close cur_pricetable;--关闭游标 end ; 运行结果如下: 3.带参数的游标 我们的查询语句的条件值有可能是在运行时才能决定的,比如性业主类型, 可能是运行时才可以决定,那如何实现呢?我们接下来学习带参数的游标,修改 上述案例 declare v_pricetable T_PRICETABLE%rowtype;--价格行对象 cursor cur_pricetable(v_ownertypeid number) is select * from T_PRICETABLE where ownertypeid=v_ownertypeid;--定义游 标 begin open cur_pricetable(2);--打开游标 loop fetch cur_pricetable into v_pricetable;--提取游标到变量 exit when cur_pricetable%notfound;--当游标到最后一行下面退 出循环 dbms_output.put_line(‘价格:‘||v_pricetable.price ||‘吨 位:‘||v_pricetable.minnum||‘-‘||v_pricetable.maxnum ); end loop; close cur_pricetable;--关闭游标 end ; 4.for循环提取游标值 declare cursor cur_pricetable(v_ownertypeid number) is select * from T_PRICETABLE where ownertypeid=v_ownertypeid;--定义游 标 begin for v_pricetable in cur_pricetable(3) loop dbms_output.put_line(‘价格:‘||v_pricetable.price ||‘吨 位:‘||v_pricetable.minnum||‘-‘||v_pricetable.maxnum ); end loop; end ; 二、存储函数 CREATE [ OR REPLACE ] FUNCTION 函数名称 (参数名称 参数类型,参数名称 参数类型,...) RETURN 结果变量数据类型 IS 变量声明部分; BEGIN 逻辑部分; RETURN 结果变量; [EXCEPTION 异常处理部分] END; (三)案例 create function fn_getaddress(v_id number) return varchar2 is v_name varchar2(30); begin select name into v_name from t_address where id=v_id; return v_name; end; 测试此函数:
需求:查询业主 ID,业主名称,业主地址,业主地址使用刚才我们创建的函数 来实现。 select id 编号,name 业主名称,fn_getaddress(addressid) 地址 from t_owners 查询结果如下: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |