一、PL/SQL是什么
PL/SQL 是 procedural language / structured language 的简写,它是由Oracle开发,专用于Oracle的一种程序设计语言。PL/SQL是块结构化语言(程序能被分成若干个逻辑块),它以块为单位,块中可以嵌套子块。
二、PL/SQL块
一个基本的PL/SQL块由3部分组成:
定义部分(DECLARE)
可执行部分(BEGIN...END)
异常处理部分(EXCEPTION)
定义部分(DECLARE):
与其它语言一样,PL/SQL中使用的变量、常量、游标和异常处理的名字都必须先定义后使用。并且必须定义在以DECLARE关键字开头的定义部分。
可执行部分(BEGIN...END):
该部分是PL/SQL块的主体,包含该块的可执行语句。该部分定义了块的功能,是必须的。由关键字BEGIN开始以END结束。
异常处理部分(EXCEPTION):
该部分包含块的异常处理程序(错误处理程序)。当该块程序体中的某个语句出现异常(检测到一个错误)时,oracle将程序控制转到异常部分的相应的异常处理程序中进行进一步的处理。该部分由关键字EXCEPTION开始,END关键字结束。
块的模板:
declare --可选项,当需要定义变量时使用
--定义变量、常量、游标、用户自定义的特殊类型等
begin --必选项,与end搭配出现
--SQL语句
exception --可选项
--错误发生时的处理动作
end; --必选项
具体实例:(对oracle数据库内置的emp表进行查询,查询出员工编号为7369的员工,并把员工的工资、姓名显示出来)
declare
--定义变量e_sal,并初始化为0,用于存放查找出来的记录的工资
e_sal number(7,2) := 0;
e_ename varchar2(10) := null;
begin
--查询出符合的记录,并把记录中的sal,ename字段的值分别赋给e_sal,e_ename变量
select sal, ename into e_sal, e_ename from emp where empno = 7369;
--打印出员工的工资e_sal和姓名e_ename
dbms_output.put_line('员工姓名:' || e_ename || chr(9) || '工资:' || e_sal);
--异常处理,当前面的select语句没查询到数据时,触发NO_DATA_FOUND异常(系统内置异常)
exception
when NO_DATA_FOUND then
dbms_output.put_line('异常:执行的SELECT没有查到数据');
end;