Oracle  PL/SQL概述
由于SQL只是一种声明式语言,它没有流程控制;也不存在变量,只有表或者列,所以不能将某个SQL语句的执行结果传递给另外一个语句。为了实现该目的,用户不得不使用一条更复杂的语句。而且,SQL语句中更没有可以控制程序流程的IF或LOOP语句。
PL/SQL是过程化的结构查询语言(Procedural Language/Structured Query Language),它可以弥补SQL语句的不足。在PL/SQL中可以通过IF和LOOP语句控制程序的执行流程,并且可以定义变量,以便利用这些变量在语句之间传递数据信息。PL/SQL是Oracle的专用语言,它是对标准SQL语言的扩展,并且SQL语句可以嵌套在PL/SQL程序代码中,将SQL的数据处理能力和PL/SQL的过程处理能力结合在一起。
在Oracle数据库内置了PL/SQL处理引擎,常用的开发工具是Oracle附带的SQL*Plus。实际上,SQL*Plus只是用于将SQL语句或PL/SQL程序发送到数据库,并将处理后的结果显示在屏幕上的工具,并且用户也可以选择其他的工具运算SQL和PL/SQL程序。
PL/SQL程序的基本结构称为块,每一个块都包含了PL/SQL语句和SQL语句。典型的PL/SQL块的结构如下:
[declare
declareation_statements]
begin
executable_statements
[exception
exception_handing_statements]
end;
PL/SQL程序块中的每一条语句都必须以分号结束,SQL语句可以是多行的,但分号表示该语句的结束。一行中可以有多条SQL语句,但是他们之间必须以分号分隔。PL/SQL程序的注释是由--表示。
从上面的语法规则中可以发现,一个PL/SQL程序块分为三部分:声明部分、执行部分和异
常处理部分。声明部分是可选的,它由关键字declare开始,到BEGIN关键字结束。在这部分可以声明一些PL/SQL变量、常量、游标和异常的定义等。当基本块结束后,声明部分中的所有内容均不复存在。在某个基本块中所声明的内容只能被在该块中使用,其他的基本块不能使用。
执行部分以关键字BEGIN开始,可以以两种不同的方式结束。如果存在异常处理,则以关键字EXCEPTION结束。如果没有使用异常处理,则以关键字END结束。在执行部分包含多个PL/SQL语句和SQL语句。
PL/SQL语句的执行过程中,则于各种原因会产生一些错误,这些错误的发生会导致程序被迫中断运行。这样PL/SQL程序开发人员就必须设法向用户发出一些有用的出错信息,或者在错误发生后采取某些措施进行纠正并继续运行程序。另外,所有相关数据库操作可能需要回退到异常产生之前的状况,这就需要在PL/SQL程序中提供异常处理能力。
PL/SQLplsql配置oracle主目录的异常处理部分是以关键字EXCEPTION开始,它的结束就是整个基本块的结束。每个异常均由WHEN语句开头,接着就是这种异常出现时相应的处理动作。
为了更好的理解PL/SQL程序,下面将通过一个具体的实例介绍PL/SQL的结构特点,使用户对PL/SQL程序的特点有一个感性的认识。
SQL> set serveroutput on
SQL> declare
  2    a number:=3;
  3    b number:=4;
  4    c number;
  5  begin
  6    c:=(a*b)/(a+b);
  7    dbms_output.put_line(c);
  8  exception
  9    when zero_divide then
10      dbms_output.put_line('除数不能为0!');
11  end;
12  /
1.71428571428571428571428571428571428571
PL/SQL 过程已成功完成。
在上面的程序中,为了在服务器端显示执行结果,使用了SET SERVEROUTPUT ON命令。在DECLARE关键字表示的声明块中声明了3个变量A、B和C,其数据类型为NUMBER。并且为变量A和B赋予了初始值3和4。
接下来以BEGIN关键字标识可执行块的开始,在可执行块中包含了两条PL/SQL语句。第一条语句计算A*B/(A+B)的值,并将计算值赋予变量C;随后的语句则使用dbms_output.p
ut_line(c);语句显示计算结果。EXCEPTIOn关键字表示异常处理块的开始。在这里捕获的异常是ZERO_DIVIDE,表示出现了除数为0的错误。出现错误时显示的错误信息为:“除数不能为0!”。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。