OraclePL/SQL通俗的讲就是过程语言(Procedural Language)和结构化查询的相关语言(SQL)相结合而演变成的编程语言,OraclePL/SQL其实就是对SQL 的扩展,它支持多种数据类型,如大对象和集合类型可以使用条件和循环等控制结构。
可以创建存储过程,触发器和程序包,给SQL 语句的执行添加程序逻辑!他与Oracle服务器
和Oracle工具紧密集成,具备可移植,灵活性和安全性。
PL/SQL 的优点
支持 SQL
数据操纵命令
事务控制命令
游标控制
SQL 函数和 SQL 运算符
支持面向对象编程 (OOP)
可移植性
可运行在任何操作系统和平台上的Oralce 数据库。
更佳的性能
与 SQL 紧密集成,简化数据处理
支持所有 SQL 数据类型
支持 NULL 值
支持 %TYPE 和 %ROWTYPE 属性类型
安全性
可以通过存储过程限制用户对数据的访问。
PL/SQL 的体系结构
PL/SQL引擎驻留在Oracle服务器中,该引擎接受PL/SQL块,并且对起
进行编译执行!#p#
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
【编辑推荐】