OraclePL编程语言的优点介绍(1)(2)
PL/SQL 块简介
OraclePL/SQL块是构成程序的基本单位,每一个块都包含有PL/SQL和SQL语句,典型的PL/SQL代码块包含如下结构:
(1).声明部分
(2)可执行部分
(3)异常处理
语法结构如下:
[DECLARE
declarations]—声明部分
BEGIN
executable statements---可执行部分
[EXCEPTION –异常处理
- handlers]
- END;
代码示例:
DECLARE
qty_on_hand NUMBER(5); --程序声明部分,定义变量,游标和自定义常量
- BEGIN
- SELECT quantity INTO qty_on_hand -
- FROM Products -
- WHERE product = '芭比娃娃' -
- FOR UPDATE OF quantity; -
- IF qty_on_hand > 0 THEN -
- UPDATE Products SET quantityquantity = quantity + 1 -
WHERE product = '芭比娃娃'; 程序执行部分
- INSERT INTO purchase_record -
- VALUES ('已购买芭比娃娃', SYSDATE); -
- END IF; -
- COMMIT; -
EXCEPTION /* 异常处理语句 * / -----------------------异常处理
- WHEN OTHERS THEN -
- DBMS_OUTPUT.PUT_LINE('出错:'|| SQLERRM); -
- END;
变量和常量
OraclePL/SQL 块中可以使用变量和常量
在声明部分声明,使用前必须先声明
声明时必须指定数据类型,每行声明一个标识符
在可执行部分的 SQL 语句和过程语句中使用
声明变量和常量的语法
- identifier [CONSTANT] datatype [NOT NULL]
- [:= | DEFAULT expr];
给变量赋值有两种方法
使用赋值语句 :=
使用 select into 语句
代码示例:
- DECLARE
- icode VARCHAR2(6);
- p_catg VARCHAR2(20);
- p_rate NUMBER;
- c_rate CONSTANT NUMBER := 0.10;
- BEGIN
- ...
- icode := 'i205';
- SELECT p_category, itemrate * c_rate
- INTO p_catg, p_rate
- FROM itemfile WHERE itemcode = icode;
- ...
- END;
数据类型
OraclePL/SQL支持的内置数据类型有如下几种:
如图:
标量类型
数字
字符
CHAR
VARCHAR2
LONG
RAW
LONG RAW
结构如图:
日期时间类型
日期时间类型
存储日期和时间数据
常用的两种日期时间类型
DATE
TIMESTAMP
布尔类型
此类别只有一种类型,即BOOLEAN类型
用于存储逻辑值(TRUE、FALSE和NULL)
不能向数据库中插入BOOLEAN数据
不能将列值保存到BOOLEAN变量中
只能对BOOLEAN变量执行逻辑操作
如图:
LOB类型
用于存储大文本、图像、视频剪辑和声音剪辑等非结构化数据。
LOB数据类型可存储最大 4GB的数据。
LOB 类型包括:
BLOB 将大型二进制对象存储在数据库中
CLOB 将大型字符数据存储在数据库中
NCLOB 存储大型UNICODE字符数据
BFILE 将大型二进制对象存储在操作系统文件中
LOB 类型的数据库列仅存储定位符,该定位符指向大型对象的存储位置
DBMS_LOB程序包用于操纵 LOB 数据
代码示例:
- SET SERVEROUTPUT ON
- DECLARE
- clob_var CLOB;
- amount INTEGER;
- offset INTEGER;
- output_var VARCHAR2(100);
- BEGIN
- SELECT chapter_text INTO clob_var
- FROM my_book_text
- WHERE chapter_id=5;
amount := 24; -- 要读取的字符数
offset := 1; -- 起始位置
- DBMS_LOB.READ(clob_var,amount,offset,output_var);
- DBMS_OUTPUT.PUT_LINE(output_var);
- END;
- /
文章出自:http://database.csdn.net/page/08155ea6-cb32-4167-ad08-022873597ded



