目录
一、PL/SQL概述
SQL语句提供了数据操作的能力,但不支持结构化编程,当要实现复杂的应用时,需要数据库管理系统提供一种过程化的编程支持。Oracle 利用过程化SQL语言(Procedure Language/Stnucture Query Language,PL/SQL)来进行结构化编程。PL/SQL将 SQL的数据操作和过程化编程语言的流程控制结合起来,是 SQL 的扩展。在 PL/SQL 中,最重要的是 存储过程 和 触发器 。
1、PL/SQL的特点
PL(Procedure Language)/SQL)是Oracle在数据库中引入的一种过程化的编程语言。
PL/SQL是对SQL的扩充:具有为程序开发而设计的特性;
在PL/SQL 中可以使用变量,进行流程控制,来实现比较复杂的业务逻辑;
PL/SQL嵌入到Oracle服务器中的,可以把它看作Oracle服务器内的一个引擎,所以具有很高的执行效率。
2、PL/SQL程序结构
PL/SQL程序的基本结构单元是块,一个 PL/SQL 程序包含了一个或多个块,每个块都可以划分为声明、执行和异常处理 3个部分,完成一个逻辑操作。PL/SQL是一种过程语言,所以PL/SQL也同其他编程语言一样有常量、变量和控制语句。
(1)PL/SQL 程序块的组成:
(1)声明部分。这部分包含变量和常量的声明和初始化,由关键字 DECLARE开始,若不许呀可省略。此处声明的变量只能在该块中使用。当该块执行结束时,声明的内容就不存在了。
(2)执行部分。这部分是 PL/SQL 程序块中的指令部分,由关键字 BEGIN开始,所有的可执行语句都放在这一部分,其他 PL/SQL程序块也可以放在这部分。
(3)异常处理部分。这部分是可选的,主要处理异常或错误。
因此 PL/SQL 程序块的语法如下:
declare
[变量声明;]
begin
[执行语句序列;]
exception
[异常处理程序;]
End;
/
(2)PL/SOL程序结构说明
1.注释符号:程序的注释部分不编译执行。
单行注释: --注释内容
多行注释:/*注释内容*/
2.PL/SQL程序的可执行语句、SQL语句和END结束标识都要以分号结束。
3.PL/SQL程序有两种: 命名的PL/SQL程序块 和 匿名的PL/SQL程序块。
命名程序块 | 有存储过程 和 函数 两种。 |
匿名程序块 | 直接在 SQL Developer 工作表编辑窗口中书写。 |
先用 SET SERVEROUTPUT ON命令将显示结果的开关打开, 在PL/SQL 中使用 DBMS_OUTPUT 中的方法进行输出时, 直接在SOL Developer 返回值窗口中显示结果。 |
【例 】使用匿名程序块输出“hello”。
set serveroutput on
declare
c varchar2(10);
begin
c:='hello'; --注意赋值等于 :=
dbms_output.put_line(c);
end;
/
4. 在PL/SQL模块中可以使用食电语句和数据操纵语句(即进行DML操作),所以PL/SQL程序是同SQL语言紧密结合在一起的。
在PL/SQL程序中, SELECT语句返回的数据是一行时,SELECT语句总是和INTO相配合,INTO后跟用于接收查询结果的变量,形式如下:
SELECT 列名1,列名2...
INTO 变量1,变量2...
FROM 表名 WHERE 条件;
5.当程序要接收返回的多行结果时,可以采用游标变量来存放。
6. PL/SQL程序的执行:
执行部分使用的变量和常量必须事先在声明部分声明,执行部分至少包括一条可执行语句。 |
NULL(空语句,什么操作也不做)是一条合法的可执行语句; |
事务控制语句COMMIT和ROLLBACK可以在执行部分使用; |
所有的 SQL数据操作语句都可以用于执行部分;而数据定义语言不能在执行部分中使用。 |
在执行部分中可以使用另一个 PLSQL程序块,这种程序块称为嵌套块。 |
SQL*Plus中匿名的PL/SQL块的执行是在PL/SQL块后输入 " / " 来执行。 |
执行命名的程序块必须使用execute关键字。 |
在另一个命名程序块或匿名程序块中执行命名的PL/SQL程序,不需要execute关键字。 |
PL/SQL 程序块不直接显示输出结果,而是提供其他方法进行输出。 |
SELECT 语句可以使用INTO子句将结果输出到变量, 还可以用 DBMS_OUTPUT 和 UTL FTLES 系统程序包提供的方法进行输出。 |
“ / ”表示 PLSQL 程序编写完毕,提交系统进行编译。 |
7.DBMS_OUTPUT