PL/SQL概述

PL/SQL(oracle专用语言)是一种过程化语言,在PL/SQL中可以通过IF语句或LOOP语句实现控制程序的执行流程,甚至可以定义变量,以便在语句之间传递信息。

1、PL/SQL块结构

PL/SQL程序以块为基本单位,其基本语法:

[DECLARE]          ---- 声明部分,可选

[BEGIN]            ----- 执行部分,必选

[EXCEPTION]        ---- 异常处理部分,可选

END

范例:

PL/SQL概述

注意:set serveroutput on功能是打开oracle自带的输出方法dbms_output。

2、代码注释和标识符

1)单行注释

     由两个连接字符“--”开始,后面紧跟着注释内容。

(2)多行注释

         多行注释由/*开头,由*/结尾

3、数据类型与定义变量和常量

    1)数值类型

     数值类型主要包括NUMBER、PLS_INTEGER和  

BINARY_INTEGER 3种基本类型。

     NUMBER类型通过NUMBER(P,S)的形式格式化数据,其功能可以存储整数或浮点数。

  范例:

PL/SQL概述

PL/SQL概述

 PLS_INTEGER和BINARY_INTEGER类型只能存储整数

(2)字符类型

         字符类型主要包括VARCHAR2、CHAR、LONG、NCHAR

     NVARCHAR2等。

         VARCHAR2用于存储可变长度字符串

         CHAR表示指定长度字符串

         LONG表示可变的字符串,以上两个字符类型有大小限制,  

     LONG任何字符串都可赋值与它。

         NCHAR和 NVARCHAR2根据各国字符集来确定

(3)日期类型(DATE类型)

4)布尔类型(BOOLEAN类型)

4、特殊数据类型

1)%TYPE类型

     使用%TYPE关键字可以声明一个与指定列名称相同的数据

 类型,它通常紧跟在指定列名后面。

范例:

PL/SQL概述

  

(2)RECORD类型(结构化的数据类型)

     RECORD类型也称记录类型,该类型的变量可以存储多个列值 组成的一行数据。

范例:

PL/SQL概述

3)%ROWTYPE

      该类型结合了%TYPE类型和RECORD的优点,其根据数据表中行的结构定义一种特殊的数据类型,用来存储从数据表中检索到的一行数据。

范例:

PL/SQL概述

修改后:

PL/SQL概述

5、定义常量和变量

(1)定义变量

      变量是指其值程序在运行过程中可以改变的数据存储结构

      其语法结构:

      <变量名><数据类型>[(长度):=<初始值>]

(2)定义常量

      常量是指其值在程序运行过程中不可以改变的数据存储结构

         其语法结构:

      <常量名>constant<数据类型>:=<常量值>

6、流程控制语句

(1)选择语句

     If...then 语句

     注:如果要判断if后面的条件表达式为空值,则需要在条件表达式中使用“is”和“null”关键字。 其代码如下:

If 表达式 is null then

....

end if;

     if...then...else语句

范例:

 PL/SQL概述

    If...then...elsif语句

功能:实现多分支判断语句

范例:

PL/SQL概述

Case语句

范例:

PL/SQL概述

2)循环语句

     loop语句

     loop语句会先执行一次循环体,然后在判断“exit when”关键字后面的表达式的值是true或false。

     范例:

PL/SQL概述

 while语句

     while语句根据它的条件表达式的值执行零次或多次循环体,在每一次执行循环体之前,必先判断条件表达式的值。

范例:

PL/SQL概述

 for语句

      for语句 是一个可以预置循环次数的循环控制语句

范例:

PL/SQL概述

7、PL/SQL游标

   游标:表中进行数据检索并操作的灵活手段

   游标主要用在服务器上,处理由客户端发送给服务端的SQL语句,或是批处理、存储过程、触发器中的数据处理请求。

   游标分为显示游标和隐示游标

(1)显示游标

     由用户声明和操作的一种游标,通常用于查询结果集,其步骤包括:声明游标、打开游标、读取游标、关闭游标。

声明游标

     声明游标主要包括游标名称和游标提供结果集的SELECT语句

     其语法如下:

     cursor 游标名 [输入参数]

     [返回值类型]

     is SELECT语句

打开游标

     其语法如下:

     open 游标名[输入参数];

读取游标

    其语法如下:

    fetch 游标名 into {变量};

关闭游标(释放系统资源)

其语法如下:

close 游标名称

范例:

PL/SQL概述

(2)游标属性

     %found:布尔型属性,如果SQL语句至少影响到一行数据,则该属性为true,否则为false。

     %notfound:布尔型属性,与%found属性的功能相反。

     %rowcount:数字型属性,返回受SQL影响的行数。

     %isopen:布尔型属性,当游标打开返回true,游标关闭返回false。

范例:

PL/SQL概述

PL/SQL概述

3)隐式游标

     隐式游标主要处理数据操纵语句(如UPDATE、DELETE语句)的执行结果,但是,在一些特殊情况下,也可以处理查询语句。注意一点,当使用隐形属性时,需要在属性前面加上隐式游标的默认名称——SQL。

范例:

PL/SQL概述

(4)通过for语句循环游标

     在使用隐式游标或显示游标处理具有多行数据的结果集时,用户可以配合for语句来完成。因为,在for语句遍历循环中,其将计时器看作一个自动的RECORD类型的变量。

范例:

隐式游标

PL/SQL概述

显示游标

PL/SQL概述

:在使用游标for循环中,可以声明游标,但不用进行打开游标、读取游标和关闭游标等操作,Oracle系统自动完成。

8、PL/SQL异常处理

 Oracle将异常分为两大类:预定义异常、自定义异常

 1)预定义异常

Oracle预定义的21个系统异常类型

命名的系统异常

产生原因

ACCESS_INTO_NULL

未定义对象

CASE_NOT_FOUND

CASE 中若未包含相应的 WHEN ,并且没有设置 ELSE 时

COLLECTION_IS_NULL

集合元素未初始化

CURSER_ALREADY_OPEN

游标已经打开

DUP_VAL_ON_INDEX

唯一索引对应的列上有重复的值

INVALID_CURSOR

在不合法的游标上进行操作

INVALID_NUMBER

内嵌的SQL 语句不能将字符转换为数字

NO_DATA_FOUND

使用 select into 未返回行,或应用索引表未初始化的元素时

TOO_MANY_ROWS

执行 select into 时,结果集超过一行

ZERO_DIVIDE

除数为 0

SUBSCRIPT_BEYOND_COUNT

元素下标超过嵌套表或 VARRAY 的最大值

SUBSCRIPT_OUTSIDE_LIMIT

使用嵌套表或 VARRAY 时,将下标指定为负数

VALUE_ERROR

赋值时,变量长度不足以容纳实际数据

LOGIN_DENIED

PL/SQL 应用程序连接到 oracle 数据库时,提供了不正确的用户名或密码

NOT_LOGGED_ON

PL/SQL 应用程序在没有连接 oralce 数据库的情况下访问数据

PROGRAM_ERROR

PL/SQL 内部问题,可能需要重装数据字典& pl./SQL 系统包

ROWTYPE_MISMATCH

宿主游标变量与 PL/SQL 游标变量的返回类型不兼容

SELF_IS_NULL

使用对象类型时,在 null 对象上调用对象方法

STORAGE_ERROR

运行 PL/SQL 时,超出内存空间

SYS_INVALID_ID

无效的 ROWID 字符串

TIMEOUT_ON_RESOURCE

        Oracle 在等待资源时超时

(2)自定义异常

     Oracle自定义异常还可分为两类:错误编码异常和业务逻辑异  常两种。

     错误编码异常:指在Oracle系统发生错误时,系统会显示错误编码和相关描述信息的异常。

范例:

PL/SQL概述

补充:

          EXCEPTION_INIT:将一个特定的错误号与程序中所声明的异常标示符关联起来。

 有关ORACLE异常详情可见:http://www.cnblogs.com/soundcode/archive/2012/01/10/2318385.html