PL/SOL(Procedural Language/SQL,过程语言/SQL)是结合了Oracle过程语言和结构化查询语言(SQL)的一种扩展语言。使用PL/SQL可以编写具有很多高级功能的程序,虽然通过多个 SQl语句也能实现同样的功能,但是相比而言,PL/SQL具有更为明显的一些优点。
(1)PL/SOL具有编程语言的特点,它能把一组SQL语句放到一个模块中,使其更具模块化程序的特点。
(2)PL/SQL可以采用过程性语言控制程序的结构,也就是说,我们可以在PL/SQL中增加逻辑结构,如判断、循环等程序结构。
(3)同其他的编程语言一样,PL/SQL可以对程序中的错误进行自动处理.使程序能够在遇到错误时不会中断,即它的异常处理机制。
(4)PL/SQL程序块具有更好的可移植性,可以移植到另一个Oracle数据中。
(5)PL/SQL程序减少了网络的交互,有助于提高程序性能。
PL/SQL引擎用来编译和执行PL/SQL块或子程序,该引擎驻留在 Oracle 服务器中。PL/SQL引擎仅执行过程语句,而将 SQL语句发送给 Oracle 服务器上的SOL语句执行器,由 SQL语句执行器执行这些SQL语句。PL/SQL体系结构如图以下所示。
2.PL/SQL块简介
PL/SQL是一种块结构的语言,它将一组语句放在一个块中。PL/SQL块将逻辑上相关的声明和语句组合在一起。匿名块是一个未在数据库中命名的PL/SQL块,在运行时被传递到PL/SQL引擎以便执行。在PL/SQL 块中可以使用 SELECT、INSERT、UPDATE、DELETE 等DML语句、事务控制语句及SQL函数等。PL/SQL块中不允许直接使用CREATE,DROP或ALTER等DOL语句,但可以通过动态SQL来执行它们。
1 添加控制 条件控制用于根据条件执行一系列语句。条件控制包括IF语句和CASE语句。 IF语句语法如下:
IF (a <= 20) THEN b:= b+1; END IF;2循环控制 循环控制用于重复执行一系列语句,据环按制包括LOoP和EXIT语句,使用EXIT语句可以立的退出循环:使用EXIT WHEN语句可以根据条件结束循环。 循环共有三种类型,包括LOOP循环、WHILE 循环和FOR循环。 LOOP循环语法如下:
LOOP循环语句如:
WHILE循环语句如: FOR循环语句如:
3顺序控制
顺序控制用于按顺序执行语句。顺序控制包括NUL语句和GOTO语句。GOTO语句不推荐使用. 下面介绍NULL语句: 1.NUL语句:NULL语句是一个可执行语句,相当于一个占位符或不执行任何操作的空语句. 2.它可以使某些语句变得有意义,提高程序的可读性,保证其他语句结构的完整性和正确性。在运行程序时出现的错误叫做异常,发生异常后,语句将停止执行、PL/SOL引擎立即将控制权转到入/SOL.块的异常处理部分,值得注意的是PL/SQL编泽铺误发生在入PLSOL.程序执行之前,因此不能由PL/SQL异常处理部分来处理。 异常情况处理(EXCEPTION)用来处理正常执行过程中未预料的事件,这里介绍两种比较典型的,即预定义异常和用户自定义异常。
程序在执行过程中,出现编程人员认为的非正常情况。对于这种异常情况的处理,需要用户在程序中定义,然后显式地在程序中将其引发。用户定义的异常错误通过显式使用RAISE语句来触发。当引发一个异常错误时,控制就转到EXCEPTION块异常错误部分,执行错误处理代码。 对于这类异常情况的处理,步骤如下.
* 在PL/SQL块的定义部分定义异常情况: <异常情况> EXCEPTION; * 抛出异常情况 RAISE <异常情况>; * 在PL/SQL块的异常情况处理部分对异常情况做出相应的处理.游标的基本原理 在Crecle 中,在执行一个有 SELECT、NSERT、UPDATE和 DELETE 语句的PL/SOL 块时,Orecle会在内存中为其分配一个缓冲区,将执行结果放在这个缓冲区中,而游标是指向该区的一个指针。 游标为应用程序提供了一种对多行数据查询结果集中的每行数据进行单独处理的方法,是设计嵌入式SQL语句的应用程序的常用编程方式,如图以下所示:
第一步:定义游标
第二步:打开游标
第三步:提取数据
第四步:关闭游标
声明游标的语法如: CURSOR cursor_name [(parameter [,parameter]...)] [RETURN return_type] IS select_statement; cursor_name指游标的名称 parameter 用于为游标指定输入参数.在指定数据类型时,不能使用长度约束,如: NUMBER(4),CHAR(10) 等都是错误的. return_type用于定义游标提取的行的类型 select_statemernt 指游标定义的查询语句 打开游标语法如: OPEN cursor_name[(parameters)]; 提取游标的语法如: FETCH cursor_name INTO variables; cursor_name指游标的名称 variables是变量名 关闭游标的语法如: CLOSE cursor_name;