激活
394
…………………………………………………………Page 395……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
如果在这个语句块运行的过程中产生的异常 用户将会看到
INPUT
SQL》 @block1
ERROR: DIVISOR IS ZERO。 SEE YOUR DBA。
PL/SQL procedure successfully pleted。
是不是这样的错误信息比下边的错误信息更友好
输入/输出
SQL》 @block1
begin
*
ERROR at line 1:
ORA…01476: divisor is equal to zero
ORA…06512: at line 20
在 PL/SQL 中的事务控制
在第 11 天中的 事务控制 中 我们已经讨论了事务控制命令 MIT ROLLBACK
SAVEPOINT 这些命令可以让程序员在在事务向数据库中进行写操作时加以控制 在多数
时候所进行的操作是需要撤消
语法
BEGIN
DECLARE
。。。
BEGIN
statements。。。
IF condition THEN
MIT;
ELSE
ROLLBACK;
END IF;
395
…………………………………………………………Page 396……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
。。。
EXCEPTION
。。。
END;
END;
PL/SQL 的一个好处就是你可以用自动地执行事务控制命令来代替对大型事务的不断
监控— — 这是非常单调和乏味的
让所有的事在一起工作
到目前为止 我们已经介绍了 PL/SQL 你已经熟悉了它所支持的数据类型以及 PL/SQL
语句块的主要特性 你已经知道了如何定义一个局部变量 常量和指针 你也已经知道了
如何在一个 PROCDURE 部分 指针的操作部分和异常部分嵌入 SQL 语句 当指针在使用
时 你应该清楚地知道如何在异常部分捕获它 现在你已经可以使用 BEGIN END 语
句块来进行了实际工作 在今天的结束部分 你将会彻底明白 PL/SQL 语句块之间的相同
关系
示例表及数据
在我们创建的 PL/SQL 语句块中使用两个表 PAYMENT_TABLE 确定了一个客户 她
/他的付款是多少 应得的总数是多少 PAY_STATUS_TABLE 最初实际上没有任何数据
数据将会依据 PAYMENT_TABLE 中的特定条件插入到 PAY_STATUS_TABLE 表中
输入
SQL》 select * from payment_table;
输出
CUSTOMER PAYMENT TOTAL_DUE
ABC 90。50 150。99
AAA 79。00 79。00
BBB 950。00 1000。00
CCC 27。50 27。50
DDD 350。00 500。95
EEE 67。89 67。89
396
…………………………………………………………Page 397……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
FFF 555。55 455。55
GGG 122。36 122。36
HHH 26。75 0。00
输入
SQL》 describe pay_status_table
输出
Name Null? Type
CUST_ID NOT NULL CHAR(3)
STATUS NOT NULL VARCHAR2(15)
AMT_OWED NUMBER(8;2)
AMT_CREDIT NUMBER(8;2)
分析
DESCRIBE 是一个 ORACLE SQL 它可以不通过查询数据字典就可以显示一个表的结
构 它与其它的 ORACLE SQL*PLUS 命令将会在第 20 天 SQL*PLUS 中提到
一个简单的 PL/SQL 语句块
这个 PL/SQL 的脚本内容如下所示
输入
set serveroutput on
BEGIN
DECLARE
AmtZero EXCEPTION;
cCustId payment_table。cust_id%TYPE;
fPayment payment_table。payment%TYPE;
fTotalDue payment_table。total_due%TYPE;
cursor payment_cursor is
select cust_id; payment; total_due
from payment_table;
fOverPaid number(8;2);
fUnderPaid number(8;2);
BEGIN
397
…………………………………………………………Page 398……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
open payment_cursor;
loop
fetch payment_cursor into
cCustId; fPayment; fTotalDue;
exit when payment_cursor%NOTFOUND;
if ( fTotalDue = 0 ) then
raise AmtZero;
end if;
if ( fPayment 》 fTotalDue ) then
fOverPaid := fPayment fTotalDue;
insert into pay_status_table (cust_id; status; amt_credit)
values (cCustId; "Over Paid"; fOverPaid);
elsif ( fPayment 《 fTotalDue ) then
fUnderPaid := fTotalDue fPayment;
insert into pay_status_table (cust_id; status; amt_owed)
values (cCustId; "Still Owes"; fUnderPaid);
else
insert into pay_status_table
values (cCustId; "Paid in Full"; null; null);
end if;
小说推荐
- SQL语言艺术(PDF格式)
- -Page 1-SQLSSQQLL语言艺术内容介绍本书分为12章,每一章包含许多原则或准则,并通过举例的方式对原则进行解释说明。这些例子大多来自于实际案例,对九种SQL经典查询场景以及其性能影响讨论,非常便于实践,为你数据库应用维护人员阅读。资深 SQL 专家 Stéphane Faroult倾力打
- 最新章:第27章
- oracle从入门到精通(PDF格式)
- -Page 1-Oracle 从入门到精通-Page 2-资源来自网络,仅供学习 Oracle 从入门到精通一、SQL 8
- 最新章:第37章
- VB2008从入门到精通(PDF格式英文版)
- -Page 1(R)The eXperT’s Voice inBeginningVB 2008From Novice to ProfessionalChristian Gross-Page 2-Page 3-Beginning VB 2008From Novice to Professional■C
- 最新章:第214章
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 最新章:第4章
- JMS简明教程(PDF格式)
- -Page 1-JMS1.1规范中文版卫建军2007‐11‐22-Page 2
- 最新章:第28章
- C语言实例教程(PDF格式)
- -Page 1-前 言Visual C+是开发运行于Windows 95和Windows NT环境下的Win32应用程序的可视化编程工具中最重要的成员之一,它为软件开发人员提供了完整的编辑、编译和调试工具和建立于Win32 API(ApplicationProgramming Interface)基
- 最新章:第143章
- 深入浅出MFC第2版(PDF格式)
- -Page 1-Page 2-山高月小山高月小 水落石出水落石出山高月小山高月小 水落石出水落石出-Page 3-深入淺出MFC(第版 使用Visual C 5.0 MFC 4.2)Dissecting MFC(Second Edition Using Visual C 5.0 MFC 4.2)侯俊
- 最新章:第309章
- 软件工程实践者的思想(PDF格式)
- -Page 1-大 道 至 简—软件工程实践者的思想周爱民(Aimingoo 著-Page 2-序2004 年 11 月初爱民(Aimingoo)第一次把他的书稿给我,我翻看了一下,第一反应讲的是感想。这不错,在技
- 最新章:第26章
- 电子电路大全(PDF格式)
- -Page 1-电力生产人员技能培训电路基础部分电路基础部分电电路路基基础础部部分分-Page 2-一、电路的基本概念和基本定律-Page 3-考试点1o 1、掌握电阻、独立电压源、独立电流源、11受控源、电容、电感、耦合电感、理想变压器诸元件的定义、性质2o 2、掌握电流、电压参考方向的概念223
- 最新章:第353章