热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

PL/SQL基础简析

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块: 
 
QQ截图20120804222612
 
dbms_output是Oracle所提供的系统包,put_line是该包所包含的过程,用于输出字符串信息。 

QQ截图20120804223739
 
注意,当使用dbms_output包输出消息时,必须要将SQL*Plus的环境变量serveroutput设置为on,打开服务器的输出显示。
 
2、包含定义部分和执行部分的PL/SQL块 
变量、常量、例外、显式游标等的使用,必须要在定义部分定义。 
   www.2cto.com  
QQ截图20120804225102
 
根据输入的雇员号显示雇员名,定义变量v_ename用于临时存放雇员名,&no为SQL*Plus的替代变量,该替代变量只在当前语句中起作用,并需要为其输入数据。如果替代变量为数字列提供数据则可以直接引用,如果替代变量为字符类型列或日期类型列提供数据,则必须要加单引号。 
 
&&标号类似于单个&标号,但需要注意,&&所定义的变量会在当前SQL*Plus环境中一直生效。 

QQ截图20120804230608
 
3、包含定义部分、执行部分和例外处理部分的PL/SQL块 
为了避免PL/SQL程序的运行错误,提高PL/SQL程序的健壮性,应合理地处理PL/SQL程序的运行错误。 
 
QQ截图20120804232034
 
● PL/SQL 块分类 
根据需要实现的应用模块功能,可以将PL/SQL块划分为匿名块、命名块、子程序和触发器等四种类型。
 
1、匿名块——指直接以DECLARE开始,没有名称的PL/SQL块。 
 
2、命名块 
命名块是指具有特定名称标识的PL/SQL块,与匿名块非常类似,只不过在PL/SQL块前使用<<>>加以标记。当使用嵌套块时,为了区分多级嵌套层次关系,可以使用命名块加以区分。 

QQ截图20120805001625
 
外层的PL/SQL块<>依赖内嵌的PL/SQL块<>查询出来的deptno,从而查询出dname。 
 
3、子程序 
子程序包括过程、函数和包。
 
过程(Procedure) 
过程用于执行特定操作。在SQL*Plus中可以使用CREATE PROCEDURE命令创建过程。当建立过程时,既可以指定输入参数(IN),也可以指定输出参数(OUT)。 
   www.2cto.com  
QQ截图20120805003647
 
过程update_sal用于更新雇员工资,调用过程可以使用execute或者call。 
 
函数(Function) 
函数用于返回特定数据,使用CREATE FUNCTION命令创建函数。当建立函数时,在函数头部必须包含RETURN子句,而在函数体内必须要包含RETURN语句返回数据。 
 
QQ截图20120805005245
 
包(Package) 
包用于逻辑组合相关的过程和函数,由包规范和包体两部分组成。包规范用于定义公用的常量、变量、过程和函数,包规范的建立使用CREATE PACKAGE命令。 
 
包规范:只包含了过程和函数的说明,没有实现代码。 
 
QQ截图20120805010559
 
包体:用于实现包规范中的过程和函数,使用CREATE PACKAGE BODY命令。 

QQ截图20120805011540
 
当调用包的过程和函数时,在过程和函数名之前必须要带有包名作为前缀(包名.子程序名),而如果要访问其它方案的包,还必须要加方案名作为前缀(方案名.包名.子程序名)。 
 
QQ截图20120805012219

QQ截图20120805012501
 
4、触发器   www.2cto.com  
触发器是指隐含执行的存储过程。当定义触发器时,必须要指定触发事件以及触发操作。常用的触发事件包括INSERT、UPDATE和DELETE语句,而触发操作则往往是一个PL/SQL块。触发器的建立使用CREATE TRIGGER命令。 
 
当我们更新dept表的deptno列时会违反完整性约束条件。因为emp表中有记录引用了deptno=10。 

QQ截图20120805013911
 
建立级联更新触发器 

QQ截图20120805014308
 
此时再更新dept表的deptno=10的列,我们看到emp表对deptno=10的引用也级联更新了 
 
QQ截图20120805014553
 

 
作者 Nevo

推荐阅读
author-avatar
水瓶座爱狮子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有