您的位置:首页 > 博客中心 > 数据库 >

[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

时间:2022-03-14 03:35

原文:

 

[]ORACLE PL/SQL编程详解之二:

 

PL/SQL块结构和组成元素(为山九仞,岂一日之功)

 

 

标识符

命名规则

例子

程序变量

V_name

V_name

程序常量

C_Name

C_company_name

游标变量

Cursor_Name

Cursor_Emp

异常标识

E_name

E_too_many

表类型

Name_table_type

Emp_record_type

Name_table

Emp

记录类型

Name_record

Emp_record

SQL*Plus 替代变量

P_name

P_sal

绑定变量

G_name

G_year_sal

 

2.4.1  变量类型

 

在ORACLE8i中可以使用的变量类型有:

类型

CHAR

VARCHAR2

BINARY_INTEGER

NUMBER(p,s)

LONG

DATE

BOOLEAN

ROWID

UROWID

 

子类

说     明

范   围

ORACLE限制

Character

String

Rowid

Nchar

定长字符串

 

 

民族语言字符集

0à32767

可选,确省=1

2000

Varchar, String

NVARCHAR2

可变字符串

民族语言字符集

0à32767

4000

4000

 

带符号整数,为整数计算优化性能

 

 

Dec

 

Double precision

Integer

Int

Numeric

Real

Small int

小数, NUMBER 的子类型

高精度实数

整数, NUMBER 的子类型

整数, NUMBER 的子类型

与NUMBER等价

与NUMBER等价

整数, 比 integer 小

 

 

 

变长字符串

0->2147483647

32,767字节

 

日期型

公元前4712年1月1日至公元后4712年12月31日

 

 

布尔型

TRUE, FALSE,NULL

不使用

 

存放数据库行号

 

 

 

通用行标识符,字符类型

 

 

 

 

 

 

 

2.4.2  复合类型

    ORACLE 在 PL/SQL 中除了提供象前面介绍的各种类型外,还提供一种称为复合类型的类型---记录和表.

 

2.4.2.1 记录类型

记录类型类似于C语言中的结构数据类型,它把逻辑相关的、分离的、基本数据类型的变量组成一个整体存储起来,它必须包括至少一个标量型或RECORD 数据类型的成员,称作PL/SQL RECORD 的域(FIELD),其作用是存放互不相同但逻辑相关的信息。在使用记录数据类型变量时,需要先在声明部分先定义记录的组成、记录的变量,然后在执行部分引用该记录变量本身或其中的成员。

 

2.4.2.2 数组类型

数据是具有相同数据类型的一组成员的集合。每个成员都有一个唯一的下标,它取决于成员在数组中的位置。在PL/SQL中,数组数据类型是VARRAY。

 

定义VARRY数据类型语法如下:

TYPE varray_name IS VARRAY(size) OF element_type [NOT NULL];

 

varray_name是VARRAY数据类型的名称,size是下整数,表示可容纳的成员的最大数量,每个成员的数据类型是element_type。默认成员可以取空值,否则需要使用NOT NULL加以限制。对于VARRAY数据类型来说,必须经过三个步骤,分别是:定义、声明、初始化。

 

2.4.2.3 使用%TYPE

定义一个变量,其数据类型与已经定义的某个数据变量(尤其是表的某一列)的数据类型相一致,这时可以使用%TYPE。

使用%TYPE特性的优点在于:

l         所引用的数据库列的数据类型可以不必知道;

l         所引用的数据库列的数据类型可以实时改变,容易保持一致,也不用修改PL/SQL程序。

2.4.3  使用%ROWTYPE

PL/SQL 提供%ROWTYPE操作符, 返回一个记录类型, 其数据类型和数据库表的数据结构相一致。

使用%ROWTYPE特性的优点在于:

l         所引用的数据库中列的个数和数据类型可以不必知道;

l         所引用的数据库中列的个数和数据类型可以实时改变,容易保持一致,也不用修改PL/SQL程序。

 

2.4.4  LOB类型

    ORACLE提供了LOB (Large OBject)类型,用于存储大的数据对象的类型。ORACLE目前主要支持BFILE, BLOB, CLOB 及 NCLOB 类型。

 

2.4.5  BIND 变量

绑定变量是在主机环境中定义的变量。在PL/SQL 程序中可以使用绑定变量作为他们将要使用的其它变量。为了在PL/SQL 环境中声明绑定变量,使用命令VARIABLE。例如:

 

VARIABLE return_code NUMBER
VARIABLE return_msg VARCHAR2(20)

 

可以通过SQL*Plus命令中的PRINT 显示绑定变量的值。例如:

2.4.6  PL/SQL 表(TABLE)

定义记录表(或索引表)数据类型。它与记录类型相似,但它是对记录类型的扩展。它可以处理多行记录,类似于高级中的二维数组,使得可以在PL/SQL中模仿数据库中的表。

 

方法

描述

EXISTS(n)

如果集合的第n个成员存在,则返回true

COUNT

返回已经分配了存储空间即赋值了的成员数量

FIRST

LAST

FIRST:返回成员的最低下标值

LAST: 返回成员的最高下标值

PRIOR(n)

返回下标为n的成员的前一个成员的下标。如果没有则返回NULL

NEXT(N)

返回下标为n的成员的后一个成员的下标。如果没有则返回NULL

TRIM

TRIM:删除末尾一个成员

TRIM(n) :删除末尾n个成员

DELETE

DELETE:删除所有成员

DELETE(n) :删除第n个成员

DELETE(m, n) :删除从n到m的成员

EXTEND

EXTEND:添加一个null成员

EXTEND(n):添加n个null成员

EXTEND(n,i):添加n个成员,其值与第i个成员相同

LIMIT

返回在varray类型变量中出现的最高下标值

 

2.5.1  关系运算符

 

运算符

=

<> , != , ~= , ^=

< 

> 

<=

>=

意义

等于

不等于

小于

大于

小于或等于

大于或等于

 

 

 

2.5.2  一般运算符

 

运算符

+

-

*

/

:=

=>

..

||

意义

加号

减号

乘号

除号

赋值号

关系号

范围运算符

字符连接符

 

2.5.3  逻辑运算符

 

运算符

IS NULL

BETWEEN  AND

IN

AND

OR

NOT

意义

是空值 

介于两者之间

在一列值中间 

逻辑与

逻辑或

取返,如IS NOT NULL, NOT IN

 

2.6.1  字符及数字运算特点

2.6.2  BOOLEAN 赋值

 

布尔值只有TRUE, FALSE及 NULL 三个值。如:

 

DECLARE
  bDone BOOLEAN;
BEGIN
  bDone := FALSE;
  WHILE NOT bDone LOOP
  Null;
  END LOOP;
END;

2.6.3  数据库赋值

 

    数据库赋值是通过 SELECT语句来完成的,每次执行 SELECT语句就赋值一次,一般要求被赋值的变量与SELECT中的列名要一一对应。如:

2.6.4  可转换的类型赋值

2011-5-9                  */

2.9.1   简单数据插入例子

 

2.9.2   简单数据删除例子

17

/***********************************************/
/* 文件名: test_deletedata.sql      */
/* 说 明:
       简单的删除例子,不是实际应用。 */
/* 作 者: EricHu                     */
/* 时 间: 2011-5-9                  */
/***********************************************/
DECLARE
  v_ename   VARCHAR2(20) := ‘Bill‘;
  v_sal       NUMBER(7,2) :=1234.56;
  v_deptno   NUMBER(2) := 10;
  v_empno   NUMBER(4) := 8888;
BEGIN
  INSERT INTO emp ( empno, ename, JOB, sal, deptno , hiredate )  
VALUES ( v_empno, v_ename, ‘Manager’, v_sal, v_deptno, 
TO_DATE(’1954.06.09’,’yyyy.mm.dd’) );
  COMMIT;
END;
 DECLARE
  v_empno   number(4) := 8888;
BEGIN
  DELETE FROM emp WHERE empno=v_empno;
  COMMIT;
END;

 

 

© 2011 

原创作品,转贴请注明作者和出处,留此信息。

 

------------------------------------------------

cnBlobs:CSDN 

 

作者:EricHu(DB、C\S、B\S、WebService、WCF、PM等)
出处:

Q Q:80368704   E-Mail: 80368704@qq.com
本博文欢迎大家浏览和转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,在『参考』的文章中,我会表明参考的文章来源,尊重他人版权。若您发现我侵犯了您的版权,请及时与我联系。
更多文章请看 

 

 

 

热门排行

今日推荐

热门手游