PL/SQL 编程(二)
版权声明:本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/u011685627/article/details/26299399
1 For循环
语法:begin
for i in reverse 1..10 loop
insert into users values(i,’奥巴马‘)。
end loop;
end;
注意:循环变量 i 是隐含添加的。所以无法看到
2 goto语句
goto 语句用于跳转到特定的位置去运行语句。因为goto语句会降低程序的可读性,所以普通情况下
不建议使用goto语句
3 null语句
null语句不会运行不论什么操作,可是能够添加程序的可读性
4 创建返回值是一个结果集的存储过程
(1) 创建一个包:
SQL> create or replace package testpackage as
type test test_cursor is ref cursor;
end testpackage;
(2) 创建存储过程
SQL> create or replace procedure sp_procedure1
(stuNo in number, param_cursor out testpackage.test_cursor) is
begin
open param_cursor for select * from emp where sutno=stuNo;
end;
5 分页
(1) sql语句
select * from
(select *,rownum NO from
(select * from emp) where rownum <=20) where rownum >=10;
(2) 创建一个包
create or replace package testpackage2 as
type test test_cursor is ref cursor;
end testpackage2;
(3) 创建存储过程
SQL> create or replace procedure procedureName2
(tableName in varchar2, -- 表名
pageSize in number, -- 每页显示的记录数
pageNow in number, -- 当前是第几页
pageCount out number, -- 总页数
p_cursor out testpackage2.test_cursor) is
v_sql varchar2(1000);
v_beginNum number := (pageNow -1)* pageSize + 1;
v_endNum number := pageNow * pageSize;
begin
v_sql := 'select * from (select *,rownum NO from (select * from '|| tableName ||')
where rownum <= '|| v_endNum ||') where rownum >= '|| v_beginNum;
open p_cursor for v_sql;
-- 创建一个sql语句
v_sql := 'select count(*) from ' || tableName;
-- 运行sql语句,将结果保存
execute immediate v_sql into rows。
if mod(rows,pageSize) = 0
then pageCount := rows / pageSize;
else
pageCount := rows / pageSize + 1;
end if;
-- 关闭游标
close p_cursor;
end;
6 异常处理
(1) 提前定义异常
(2) 非提前定义异常
(3) 自己定义异常
例1
SQL> declare v_name emp.ename%type;
begin
select ename into v_name from emp where empno = &no;
dbms_output.put_line('名字:' || v_name);
exception
when no_data_found
then dbms_output.put_line('编号没有!
');
end;
提前定义异常
a case_not_found
在编写case 语句时。假设在when子句中没有包括必须的条件分支(没有符合条件的)。就会触发case_not_found异常
b cursor_already_open
当又一次打开已经打开的游标时触发此异常
c dup_val_on_index
在唯一索引所相应的列上插入反复值时触发此异常
d invalid_cursor
当试图在不合法的游标上进行操作时触发此异常
e invalid_number
当输入的数字无效时触发此异常
f too_many_rows
当返回值不止是一条记录时触发此异常
g zero_divide
当进行 x/0,即除数为零的操作时触发此异常
h value_error
当进行赋值操作时,假设变量的长度不足以存储实际数据时触发此异常
i login——denide
当用户非法登录时会触发此异常
j not_logged_on
假设用户没有登录就运行DML操作,就会触发此异常
k storage_error
假设超出了内存空间,就会触发此异常
l timeout_on_resource
当Oracle等待资源时。假设发生超时情况,就会触发此异常
自己定义异常
SQL> create or replace procedure procedureName2(sp_empNo number) is
MyExpception Exceptiom; -- 自己定义一个异常
begin
update emp set sal = sal * 1.2 where empno = &no;
if sql%notfound then
raise MyExpception; -- 触发自己定义异常
end if;
exception
when no_data_found
then dbms_output.put_line('没有更新数据!
');
end;
PL/SQL 编程(二)的更多相关文章
- [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)
原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日 ...
- ORACLE PL/SQL编程详解
ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...
- pl/sql编程
body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...
- [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)
原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...
- ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)
原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!) 继上篇:ORACLE P ...
- [推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)
原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) ...
- [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)
原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL ...
- 【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航
原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人 ...
- [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)
原文:[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) [推荐]ORACLE PL/SQL编程详解之一: PL/SQL 程序设计简介(千里之行,始于足下 ...
随机推荐
- KVC、KVO实现过程
1.KVC的实现过程 以 [object setValue:@"134567" forKey:@"uid"];为例子,来探究KVC的实现过程 第一步:搜索1.首 ...
- [转]微信小程序联盟 跳坑《一百八十一》设置API:wx.openSetting使用说明
本文转自:http://www.wxapp-union.com/forum.php?mod=viewthread&tid=4066 这个API解决了过去一个长久以来无法解决的问题,如何让用户重 ...
- Centos7 linux下 安装 Redis 5.0
网上找了很多文章,发现不全而且有些问题,安装很多次之后,总结一篇可以使用的,记录之. 环境:Centos7+Redis 5.0,如果环境不符合,本篇仅供参考. 1.准备工作 作者习惯软件安装包放在单独 ...
- thrift简介
thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl ...
- jQuery源码分析系列 : 整体架构
query这么多年了分析都写烂了,老早以前就拜读过, 不过这几年都是做移动端,一直御用zepto, 最近抽出点时间把jquery又给扫一遍 我也不会照本宣科的翻译源码,结合自己的实际经验一起拜读吧! ...
- windows 2003 安装 MVC 环境 404错误,无法找到该页
在windows server 2003 IIS6 系统安装 DotNet 4.0 + MVC3 环境后, .cshtml 文件依然无法运行,404错误 解决方案:查看处理程序隐射,如果没有.csht ...
- 移动web开发ajax缓存操作
移动web开发过程中网速是必须考虑的一个因素,所以一般是尽可能的在本地存储数据,避免弱网环境下请求数据失败导致页面没有内容的情况. 前后端分离是web开发的必然趋势,在PC端我们有时甚至为了避免aja ...
- html+css 布局篇
float 做了float后有一些不好的影响. 1.背景不能显示 由于浮动产生,如果对父级设置了(CSS background背景)CSS背景颜色或CSS背景图片,而父级不能被撑开,所以导致CSS背景 ...
- layui-学习02-全局样式
CSS内置公共基础类 类名(class) 说明 布局 layui-main 用于设置一个宽度为 1140px 的水平居中块(无响应式) layui-inline 用于将标签设为内联块状元素 layui ...
- 初学js的穷举思想
初学者,最关机键的,就是掌握for的穷举思想. 穷举:穷尽.完全.全部. 具体方法: 外层:用for循环一一列举所有可能性 内层:用if语句进行判断,如果满足条件就输出,不满足的跳出进行下次循环. & ...