数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

PL/SQL基础教程(二)


发布日期:2024年08月01日
 
PL/SQL基础教程(二)

变量和常量

变量存放在内存中以获得值能被PL/SQL块引用你可以把变量想象成一个可储藏东西的容器容器内的东西是可以改变的

声明变量

变量一般都在PL/SQL块的声明部分声明PL/SQL是一种强壮的类型语言这就是说在引用变量前必须首先声明要在执行或异常处理部分使用变量那么变量必须首先在声明部分进行声明

声明变量的语法如下

Variable_name [CONSTANT] databyte [NOT NULL][:=|DEFAULT expression]

注意:可以在声明变量的同时给变量强制性的加上NOT NULL约束条件此时变量在初始化时必须赋值

给变量赋值

给变量赋值有两种方式

直接给变量赋值

X:=;

Y=Y+(X*);

通过SQL SELECT INTO 或FETCH INTO给变量赋值

SELECT SUM(SALARY)SUM(SALARY*)

INTO TOTAL_SALARYTATAL_COMMISSION

FROM EMPLOYEE

WHERE DEPT=;

常量

常量与变量相似但常量的值在程序内部不能改变常量的值在定义时赋予他的声明方式与变量相似但必须包括关键字CONSTANT常量和变量都可被定义为SQL和用户定义的数据类型

ZERO_VALUE CONSTANT NUMBER:=;

这个语句定了一个名叫ZERO_VALUE数据类型是NUMBER值为的常量

标量(scalar)数据类型

标量(scalar)数据类型没有内部组件他们大致可分为以下四类

number

character

date/time

boolean

显示了数字数据类型显示了字符数据类型显示了日期和布尔数据类型

Scalar Types:Numeric

Datatype Range Subtypes description

BINARY_INTEGER NATURAL

NATURAL

NPOSITIVE

POSITIVEN

SIGNTYPE

用于存储单字节整数

要求存储长度低于NUMBER值

用于限制范围的子类型(SUBTYPE):

NATURAL:用于非负数

POSITIVE:只用于正数

NATURALN:只用于非负数和非NULL值

POSITIVEN:只用于正数不能用于NULL值

SIGNTYPE:只有值:

NUMBER EE DEC

DECIMAL

DOUBLE

PRECISION

FLOAT

INTEGERIC

INT

NUMERIC

REAL

SMALLINT 存储数字值包括整数和浮点数可以选择精度和刻度方式语法

number[( [])]

缺省的精度是scale是

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

字符数据类型

datatype rang subtype description

CHAR 最大长度字节 CHARACTER 存储定长字符串如果长度没有确定缺省是

LONG 最大长度字节 存储可变长度字符串

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

LONGRAW 最大长度 与LONG数据类型相似同样他也不能在字符集之间进行转换

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

VARCHAR 最大长度字节 STRINGVARCHAR 与VARCHAR数据类型相似存储可变长度的字符串声明方法与VARCHAR相同

DATE和BOOLEAN

datatype range description

BOOLEAN TRUE/FALSE 存储逻辑值TRUE或FALSE无参数

DATE // BC 存储固定长的日期和时间值日期值中包含时间

LOB数据类型

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

BFILE

BLOB

CLOB

NCLOB

操作符

与其他程序设计语言相同PL/SQL有一系列操作符操作符分为下面几类

算术操作符

关系操作符

比较操作符

逻辑操作符

算术操作符如表所示

operator operation

+ 加

/ 除

* 乘

** 乘方

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

operator operation

< 小于操作符

<= 小于或等于操作符

> 大于操作符

>= 大于或等于操作符

= 等于操作符

!= 不等于操作符

<> 不等于操作符

:= 赋值操作符

显示的是比较操作符

operator operation

IS NULL 如果操作数为NULL返回TRUE

LIKE 比较字符串值

BETWEEN 验证值是否在范围之内

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

显示的是逻辑操作符

operator operation

AND 两个条件都必须满足

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

NOT 取反

执行部分

执行部分包含了所有的语句和 表达式执行部分以关键字BEGIN开始以关键字EXCEPTION结束如果EXCEPTION不存在那么将以关键字END结束分号分隔每一条语 句使用赋值操作符:=或SELECT INTO或FETCH INTO给每个变量赋值执行部分的错误将在异常处理部分解决在执行部分中可以使用另一个PL/SQL程序块这种程序块被称为嵌套块

所有的SQL数据操作语句都可以用于执行部分PL/SQL块不能再屏幕上显示SELECT语句的输出SELECT语句必须包括一个INTO子串或者 是游标的一部分执行部分使用的变量和常量必须首先在声明部分声明执行部分必须至少包括一条可执行语句NULL是一条合法的可执行语句事物控制语句 COMMIT和ROLLBACK可以在执行部分使用数据定义语言(Data Definition language)不能在执行部分中使用DDL语句与EXECUTE IMMEDIATE一起使用或者是DBMS_SQL调用

执行一个PL/SQL块

SQL*PLUS中匿名的PL/SQL块的执行是在PL/SQL块后输入/来执行如下面的例子所示

declare

v_comm_percent constant number:=;

begin

update emp

set comm=sal*v_comm_percent

where deptno=;

end

SQL> /

PL/SQL procedure successfully completed

SQL>

命名的程序与匿名程序的执行不同执行命名的程序块必须使用execute关键字

create or replace procedure update_commission

(v_dept in numberv_pervent in number default ) is

begin

update emp

set comm=sal*v_percent

where deptno=v_dept;

end

SQL>/

Procedure created

SQL>execute update_commission();

PL/SQL procedure successfully completed

SQL>

如果在另一个命名程序块或匿名程序块中执行这个程序那么就不需要EXECUTE关进字

declare

v_dept number;

begin

select adeptno

into v_dept

from emp a

where job=PRESIDENT

update_commission(v_dept);

end

SQL>/

PL/SQL procedure successfully completed

SQL>

               

上一篇:数据库备份与恢复测试(7)

下一篇:不同平台的数据库异步I/O的使用