Oracle扩展PL/SQL简介(一)

来源:互联网 发布:加入淘宝客要多少钱 编辑:程序博客网 时间:2024/05/21 22:53

好久没有写文章了,现发表我对PL/SQL的总结。

注:
    文中代码都是在oracle10g 实验并运行成功
    代码大多是在scott模式下执行,部分是在hr模式下
    使用sqlplus工具

 
1. PL/SQL 概述
PL/SQL 是 Oracle 对 SQL 规范的扩展,是一种块结构语言,即构成一个 PL/SQL 程序的基本单位(过程、函数和无名块 ) 是逻辑块,可包含任何数目的嵌套块。这种程序结构支持逐步求精方法解决问题。一个块(或子块 ) 将逻辑上相关的说明和语句组合在一起,其形式为:
    DECLARE
        --- 说明
    BEGIN
        --- 语句序列
    EXCEPTION
        --- 例外处理程序
    END ;
它有以下优点 :
    ●    支持SQL;
    ●    生产率高;
    ●    性能好;
    ●    可称植性;
    ●    与ORACLE集成.

2. PL/SQL 体系结构
PL/SQL是ORACLE对SQL扩展的一种技术,不是一种独立产品,可认为这种技术是 PL/SQL 块和子程序的一种机,它可接收任何有效的 PL/SQL 块或子程序。如图所示:

plsql

 

2.PL/SQL 基础:
PL/SQL 有一字符集、保留字、标点、数据类型、严密语法等,它与 SQL 有相同表示,现重点介绍:
1) 、数据类型:
  标量 (scalar) 数据类型没有内部组件,他们大致可分为以下四类:
   . number
   . character
   . date/time
   . boolean
 
  表 1 显示了数字数据类型;表 2 显示了字符数据类型;表 3 显示了日期和布尔数据类型。
 
表1 Scalar Types:Numeric

Datatype

Range

Subtypes

description

BINARY_INTEGER

[-214748364, 2147483647]

NATURAL
NATURAL
NPOSITIVE
POSITIVEN
SIGNTYPE

用于存储单字节整数。
要求存储长度低于NUMBER值。
用于限制范围的子类型(SUBTYPE):
NATURAL:用于非负数
POSITIVE:只用于正数
NATURALN:只用于非负数和非NULL值
POSITIVEN:只用于正数,不能用于NULL值
SIGNTYPE:只有值:-1、0或1.

NUMBER

[1.0E-130,1.0E126)

DEC
DECIMAL
DOUBLE
PRECISION
FLOAT
INTEGERIC
INT
NUMERIC
REAL
SMALLINT

存储数字值,包括整数和浮点数。可以选择精度和刻度方式,语法:
number[ ( [,])]。
缺省的精度是38,scale是0.

PLS_INTEGER

[-214748364, 2147483647]

 

与BINARY_INTEGER基本相同,但采用机器运算时,PLS_INTEGER提供更好的性能 。

 

 

   NUMBER 数字型  能存放整数值和实数值,并且可以定义精度和取值范围
   BINARY_INTEGER 数字型 可存储带符号整数,为整数计算优化性能
   DEC 数字型 NUMBER 的子类型,小数
   DOUBLE PRECISION 数字型 NUMBER 的子类型,高精度实数
   INTEGER 数字型 NUMBER 的子类型,整数
   INT 数字型 NUMBER 的子类型,整数
   NUMERIC 数字型 NUMBER 的子类型,与 NUMBER 等价
   REAL 数字型 NUMBER 的子类型,与 NUMBER 等价
   SMALLINT 数字型 NUMBER 的子类型,取值范围比 INTEGER 小

 

表2 字符数据类型 

datatype

rang

subtype

description

CHAR

最大长度32767字节

CHARACTER

存储定长字符串,如果长度没有确定,缺省是1

LONG

最大长度2147483647字节

 

存储可变长度字符串

RAW

最大长度32767字节

 

用于存储二进制数据和字节字符串,当在两个数据库之间进行传递时,RAW数据不在字符集之间进行转换。

LONGRAW

最大长度2147483647

 

与LONG数据类型相似,同样他也不能在字符集之间进行转换。

ROWID

18个字节

 

与数据库ROWID伪列类型相同,能够存储一个行标示符,可以将行标示符看作数据库中每一行的唯一键值。

VARCHAR2

最大长度32767字节

STRINGVARCHAR

与VARCHAR数据类型相似,存储可变长度的字符串。声明方法与VARCHAR相同

 

   CHAR 字符型  定长字符串
   LONG 字符型 变长字符串,最大长度可达 32,767
      ROWID ROWID 存放数据库的行号
      VARCHAR2 字符型 存放可变长字符串,有最大长度
表3 DATE和BOOLEAN 

 

datatype

range

description

BOOLEAN

TRUE/FALSE

存储逻辑值TRUE或FALSE,无参数

DATE

01/01,4712 BC 到12/31, 9999 AD

存储固定长的日期和时间值,日期值中包含时间

 

   DATE 日期型  以数据库相同的格式存放日期值
   BOOLEAN 布尔型 TRUE OR FALSE

   LOB 数据类型
    LOB( 大对象 ,Large object) 数据类型用于存储类似图像,声音这样的大型数据对象, LOB 数据对象可以是二进制数据也可以是字符数据,其最大长度不超过 4G 。 LOB 数据类型支持任意访 问方式, LONG 只支持顺序访问方式。 LOB 存储在一个单独的位置上,同时一个 "LOB 定位符 "(LOB locator) 存储在原始的表中,该定位符是一个指向实际数据的指针。在 PL/SQL 中操作 LOB 数据对象使用 ORACLE 提供的包 DBMS_LOB.LOB 数据类型可分为以下四类:
  . BFILE
  . BLOB
  . CLOB
  . NCLOB

2)操作符
  与其他程序 设计 语言相同, PL/SQL 有一系列操作符。操作符分为下面几类:
  . 算术操作符
  . 关系操作符
  . 比较操作符

. 逻辑操作符
 算术操作符如表 4 所示 

operator

operation

+

-

/

*

**

乘方

     关系操作符主要用于条件判断语句或用于 where 子串中,关系操作符检查条件和结果是否为 true 或 false, 表 5 是 PL/SQL 中的关系操作符

     

    operator

    operation

    <

    小于操作符

    <=

    小于或等于操作符

    >

    大于操作符

    >=

    大于或等于操作符

    =

    等于操作符

    !=

    不等于操作符

    <>

    不等于操作符

    :=

    赋值操作符

     

    表6 显示的是比较操作符

    perator

    operation

    IS NULL

    如果操作数为NULL返回TRUE

    LIKE

    比较字符串值

    BETWEEN

    验证值是否在范围之内

    IN

    验证操作数在设定的一系列值中

     

    表7显示的是逻辑操作符

    operator

    operation

    AND

    两个条件都必须满足

    OR

    只要满足两个条件中的一个

    NOT

    取反

     

     

     

     

     

     

    pl/sql number型位操作

    与操作:bitand(a,b)

     

     

    原创粉丝点击