作者:水瓶座爱狮子 | 来源:互联网 | 2014-07-11 17:33
PL/SQL基础简析SQLSQL(StructuredQueryLanguage)是关系数据库的基本操作语言,它是应用程序与数据库进行交互操作的接口。它将数据查询(DataQuery)、数据操纵(DataManipulation)、数据定义(Data...SyntaxHighli
PL/SQL基础简析
SQL
SQL(Structured Query Language)是关系数据库的基本操作语言,它是应用程序与数据库进行交互操作的接口。它将数据查询(Data Query)、数据操纵(Data Manipulation)、数据定义(Data Definition)和数据控制(Data Control)功能集于一体,从而使得我们可以通过SQL语言访问数据库执行相应操作。
www.2cto.com
● 数据查询语言(SELECT语句):用于检索数据库数据。
● 数据操纵语言(DML):用于改变数据库数据,包括INSERT、UPDATE、DELETE三条语句。
● 事务控制语言(TCL):用于维护数据的一致性,包括COMMIT、ROLLBACK、SAVEPOINT三条语句。
● 数据定义语言(DDL):用于建立、修改和删除数据库对象。如CREATE TABLE等,DDL语句会自动提交事务。
● 数据控制语言(DCL):用于执行权限授予和收回操作,包括GRANT和REVOKE两条命令。DCL语句会自动提交事务。
SQL关键字、对象名和列名不区分大小写,字符值和日期值区分大小写。
SelEct ename, SAL FROM emp where ename='SMITH'; 此处SMITH必须要大写,单引号。
www.2cto.com
PL/SQL
PL/SQL是Oracle特有的
编程语言,不仅具有过程编程语言的基本特征(循环、条件分支等),而且还具有对象编程语言的高级特征(重载、继承等)。
PL/SQL(Procedural Language/SQL)是
Oracle在标准SQL语言上的过程性扩展。PL/SQL不仅允许嵌入SQL语句,而且允许定义变量和常量,允许使用条件语句和循环语句,允许使用例外处理各种错误,从而提供了更加强大的功能。
PL/SQL块
块(Block)是PL/SQL的基本程序单元,编写PL/SQL程序实际上就是编写PL/SQL块。完成相对简单的功能可能只需要编写一个PL/SQL块就可以了,如果要实现复杂的应用功能,可能需要在一个PL/SQL块中嵌套其它PL/SQL块。
● PL/SQL 块结构
PL/SQL块由三个部分组成:定义部分、执行部分、例外处理部分。
PL/SQL块的基本结构如下所示:
DECLARE
/*
* 定义部分——定义常量、变量、游标、例外、复杂数据类型,该部分是可选的
*/ www.2cto.com
BEGIN
/*
* 执行部分——PL/SQL语句和SQL语句,该部分是必须的
*/
EXCEPTION
/*
* 例外处理部分——处理运行错误,该部分是可选的
*/
END; /* 块结束标记 */
1、只包括执行部分的PL/SQL块:
dbms_output是Oracle所提供的
系统包,put_line是该包所包含的过程,用于输出字符串信息。
注意,当使用dbms_output包输出消息时,必须要将SQL*Plus的环境变量serveroutput设置为on,打开服务器的输出显示。
2、包含定义部分和执行部分的PL/SQL块
变量、常量、例外、显式游标等的使用,必须要在定义部分定义。
www.2cto.com
根据输入的雇员号显示雇员名,定义变量v_ename用于临时存放雇员名,&no为SQL*Plus的替代变量,该替代变量只在当前语句中起作用,并需要为其输入数据。如果替代变量为数字列提供数据则可以直接引用,如果替代变量为字符类型列或日期类型列提供数据,则必须要加单引号。
&&标号类似于单个&标号,但需要注意,&&所定义的变量会在当前SQL*Plus环境中一直生效。
3、包含定义部分、执行部分和例外处理部分的PL/SQL块
为了避免PL/SQL程序的运行错误,提高PL/SQL程序的健壮性,应合理地处理PL/SQL程序的运行错误。
● PL/SQL 块分类
根据需要实现的应用模块功能,可以将PL/SQL块划分为匿名块、命名块、子程序和触发器等四种类型。
1、匿名块——指直接以DECLARE开始,没有名称的PL/SQL块。
2、命名块
命名块是指具有特定名称标识的PL/SQL块,与匿名块非常类似,只不过在PL/SQL块前使用<<>>加以标记。当使用嵌套块时,为了区分多级嵌套层次关系,可以使用命名块加以区分。
外层的PL/SQL块<>依赖内嵌的PL/SQL块<>查询出来的deptno,从而查询出dname。
3、子程序
子程序包括过程、函数和包。
过程(Procedure)
过程用于执行特定操作。在SQL*Plus中可以使用CREATE PROCEDURE命令创建过程。当建立过程时,既可以指定输入参数(IN),也可以指定输出参数(OUT)。
www.2cto.com
过程update_sal用于更新雇员工资,调用过程可以使用execute或者call。
函数(Function)
函数用于返回特定数据,使用CREATE FUNCTION命令创建函数。当建立函数时,在函数头部必须包含RETURN子句,而在函数体内必须要包含RETURN语句返回数据。
包(Package)
包用于逻辑组合相关的过程和函数,由包规范和包体两部分组成。包规范用于定义公用的常量、变量、过程和函数,包规范的建立使用CREATE PACKAGE命令。
包规范:只包含了过程和函数的说明,没有实现代码。
包体:用于实现包规范中的过程和函数,使用CREATE PACKAGE BODY命令。
当调用包的过程和函数时,在过程和函数名之前必须要带有包名作为前缀(包名.子程序名),而如果要访问其它方案的包,还必须要加方案名作为前缀(方案名.包名.子程序名)。
4、触发器 www.2cto.com
触发器是指隐含执行的存储过程。当定义触发器时,必须要指定触发事件以及触发操作。常用的触发事件包括INSERT、UPDATE和DELETE语句,而触发操作则往往是一个PL/SQL块。触发器的建立使用CREATE TRIGGER命令。
当我们更新dept表的deptno列时会违反完整性约束条件。因为emp表中有记录引用了deptno=10。
建立级联更新触发器
此时再更新dept表的deptno=10的列,我们看到emp表对deptno=10的引用也级联更新了
作者 Nevo