本帖最后由 我是楠楠 于 2018-5-29 16:28 编辑
(六)循环 1.无条件循环 语法结构 [AppleScript] 纯文本查看 复制代码 loop
--循环语句
end loop; 范例:输出从1开始的100个数 [AppleScript] 纯文本查看 复制代码 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、条件循环 语法结构 [AppleScript] 纯文本查看 复制代码 while 条件
loop
end loop; 范例:输出从1开始的100个数 [AppleScript] 纯文本查看 复制代码 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循环 基本语法 [AppleScript] 纯文本查看 复制代码 for 变量 in 起始值..终止值
loop
end loop; 范例:输出从1开始的100个数 [AppleScript] 纯文本查看 复制代码 begin
for v_num in 1..100
loop
dbms_output.put_line(v_num);
end loop;
end; (七)游标 1.什么是游标 游标是系统为用户开设的一个数据缓冲区,存放 SQL 语句的执行结果。我们 可以把游标理解为 PL/SQL 中的结果集。
2.语法结构及示例 在声明区声明游标,语法如下: [AppleScript] 纯文本查看 复制代码 cursor 游标名称 is SQL 语句; 使用游标语法 [AppleScript] 纯文本查看 复制代码 open 游标名称
loop
fetch 游标名称 into 变量
exit when 游标名称%notfound
end loop;
close 游标名称 需求:打印业主类型为 1 的价格表 代码: [AppleScript] 纯文本查看 复制代码 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.带参数的游标 我们的查询语句的条件值有可能是在运行时才能决定的,比如性业主类型, 可能是运行时才可以决定,那如何实现呢?我们接下来学习带参数的游标,修改 上述案例 [AppleScript] 纯文本查看 复制代码 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循环提取游标值 我们每次提取游标,需要打开游标 关闭游标 循环游标 提取游标 控制循环的 退出等等,好麻烦!有没有更简单的写法呢?有!用 for 循环一切都那么简单, 上例的代码可以改造为下列形式 [AppleScript] 纯文本查看 复制代码 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 ;
二、存储函数 (一)什么是存储函数 存储函数又称为自定义函数。可以接收一个或多个参数,返回一个结果。 在函数中我们可以使用 P/SQL 进行逻辑的处理。 (二)存储函数语法结构 创建或修改存储过程的语法如下: [AppleScript] 纯文本查看 复制代码 CREATE [ OR REPLACE ] FUNCTION 函数名称
(参数名称 参数类型, 参数名称 参数类型, ...)
RETURN 结果变量数据类型
IS
变量声明部分;
BEGIN
逻辑部分;
RETURN 结果变量;
[EXCEPTION
异常处理部分]
END;
(三)案例 需求: 创建存储函数,根据地址 ID 查询地址名称。 语句: [AppleScript] 纯文本查看 复制代码 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; 测试此函数: [AppleScript] 纯文本查看 复制代码 select fn_getaddress(3) from dual 输出内容 需求:查询业主 ID,业主名称,业主地址,业主地址使用刚才我们创建的函数 来实现。 [AppleScript] 纯文本查看 复制代码 select id 编号,name 业主名称,fn_getaddress(addressid) 地址
from t_owners 查询结果如下:
【郑州校区】Oracle-day04 上传智播客·黑马程序员郑州校区地址 河南省郑州市高新区长椿路11号大学科技园(西区)东门8号楼三层 联系电话0371-56061160 / 61/62 来校路线地铁一号线梧桐街站A口出
|