SQL 21 日自学通(V1。0) 翻译人 笨猪
Input truncated to 1 characters
=======================
ERROR: Aborting program。
Unknown Pay Type for: JEFF JENNINGS
PL/SQL procedure successfully pleted。
分析
错误信息表明 JEFF JENNINGS 的薪金支付方式不是 HOURLY 和 SALARY 这就是异
常所捕获到的错误信息
存储过程 包和触发机制
使用 PL/SQL 你可以创建存储对象来代替日复一日的输入单调和枯燥的代码 过程
是一些可以执行一些特定类型的存储工作的代码块 相关的过程可以组合和存储在一起
这称为包 触发机制是一种在其它的事务中使用的数据库对象 你也许对一个叫 ORDERS
的表建立了一个触发机制以使得每次当 ORDERS 表接受到数据时都向 HISTORY 表中插入
数据 这些对象的基本语法如下
过程示例
语法
PROCEDURE procedure_name IS
variable1 datatype;
。。。
BEGIN
statement1;
。。。
EXCEPTION
when 。。。
END procedure_name;
405
…………………………………………………………Page 406……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
示例包
语法
CREATE PACKAGE package_name AS
PROCEDURE procedure1 (global_variable1 datatype; 。。。);
PROCEDURE procedure2 (global_variable1 datatype; 。。。);
END package_name;
CREATE PACKAGE BODY package_name AS
PROCEDURE procedure1 (global_variable1 datatype; 。。。) IS
BEGIN
statement1;
。。。
END procedure1;
PROCEDURE procedure2 (global_variable1 datatype; 。。。) IS
BEGIN
statement1;
。。。
END procedure2;
END package_name;
示例触发机制
SYNTAX:
CREATE TRIGGER trigger_name
AFTER UPDATE OF column ON table_name
FOR EACH ROW
BEGIN
statement1;
。。。
END;
406
…………………………………………………………Page 407……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
下边的例子在当对 PAY_TABLE 表的数据进行更新时使用触发机制向一个事务表中插
入数据 事务表如下所示
INPUT:
SQL》 describe trans_table
OUTPUT:
Name Null? Type
ACTION(10) VARCHAR2
NAME VARCHAR2(20)
PREV_PAY NUMBER(8;2)
CURR_PAY NUMBER(8;2)
EFF_DATE DATE
示例行的数据如下
输入/输出
SQL》 select * from pay_table where name = "JEFF JENNINGS";
NAME PAY_TYPE PAY_RATE EFF_DATE PREV_PAY
JEFF JENNINGS WEEKLY 71。50 01…JAN…97
现在 创建一个触发机制
SQL》 CREATE TRIGGER pay_trigger
2 AFTER update on PAY_TABLE
3 FOR EACH ROW
4 BEGIN
5 insert into trans_table values
6 ("PAY CHANGE"; :new。name; :old。pay_rate;
7 :new。pay_rate; :new。eff_date);
8 END;
9 /
然后对 PAY_TABLE 进行更新操作 这会导致触发机制的运行
输入/输出
SQL》 update pay_table
2 set pay_rate = 15。50;
3 eff_date = sysdate
407
…………………………………………………………Page 408……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
4 where name = "JEFF JENNINGS";
SQL》 select * from pay_table where name = "JEFF JENNINGS";
NAME PAY_TYPE PAY_RATE EFF_DATE PREV_PAY
JEFF JENNINGS WEEKLY 15。50 20…MAY…97
SQL》 select * from trans_table
ACTION NAME PREV_PAY CURR_PAY EFF_DATE
PAY CHANGE JEFFJENNINGS 71。5 15。5 20…MAY…97
分析
在 PAY_TABE 表中的 PREV_PAY 中是空的 但是在 TRANS_TABLE 中则存在数值
你是不是糊涂了 PAY_TABLE 是不需要 PREV_PAY 的 因为每小时的薪金为 71。5 在这里
很明显是一个错误的数值 由于更新操作是一个事务 所以我们把 PREV_PAY 的数值插入
到了 TRANS_TABLE 表中 它的目的是为所以的用 PAY_TABLE 工作的表保存记录
注 如果你工作在类似的网络环境中 你也许会注意到 PL/SQL 与 JAVA 的存储过程有一
些类似 但是 你要注意到他们的不同之处 PL/SQL 是对标准的 SQL 的增强 它是
一种过程型语言 JAVA 比它有更多的先进的特性 它允许程序写出比 PL/SQL 更为复
杂的程序 PL/SQL 是基于指定的数据库的增强型 SQL 而 JAVA 则在 CPU 级上工作
的程序 大多数的过程型语言 如 PL/SQL 是针对特定的平台开发的 而 JAVA 则比过
程型语言更高级 它可以在交叉的平台上工作并可以实现标准化
总结
PL/SQL 对标准的 SQL 进行了扩展 PL/SQL 所执行的基本功能与第三代语言相同
它可以使用局部变量来支持动态代码 也就是说块内的数值可以根据用户的输入 指定的
条件 和指针的内容的变化而变化 PL/SQL 使用标准的过程语言来对语句进行控制 IF
THEN 和 LOOP 可以让你
小说推荐
- 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章