您的位置:首页 > 数据库 > Oracle

Oracle PL/SQL开发入门(第二弹:PL/SQL基本概念)

2017-03-21 22:42 330 查看

什么是PL/SQL

标准的SQL语言提供了定义和操纵数据库对象的能力,但是并没有提供程序设计语言所具有的诸多特性。PL/SQL(Procedural Language/SQL)就是为标准SQL语言添加了过程化功能的一门程序设计语言。这让SQL语句拥有了结构化程序设计的特性,使得开发人员可以直接使用PL/SQL进行复杂业务逻辑的编写。

功能特点

结构化程序设计

顺序结构

分支结构

循环结构

与SQL语言整合

要注意的是,在PL/SQL代码中只能直接使用DML语句,如果在PL/SQL代码中直接使用SQL的DDL语句,Oracle将会提示绑定错误,例如这样就是错误的:

BEGIN
CREATE TABLE BOOKS(ID int NOT NULL,BOOKNAME varchar2(100) NULL);
END;


执行以上代码会报错,这是由PL/SQL的早起绑定特性所决定的,在编译时PL/SQL引擎发现BOOKS表不存在,会引起编译时错误。如果修改为以下写法,就没问题了:

DECLARE
--定义SQL DDL语句
v_SQLStr VARCHAR(200):=' CREATE TABLE BOOKS(ID int NOT NULL,BOOKNAME varchar2(100) NULL) ';
BEGIN
EXECUTE IMMEDIATE v_SQLStr;  --执行DDL语句
END;


面向对象开发

PL/SQL可以基于对象类型来定义对象表,或者将对象类型作为Oracle表列进行保存。

模块化应用程序开发

PL/SQL提供块、子程序和包3个程序单元,可以将程序分成多个部分,将复杂的问题划分开来,做到模块化。

提高应
4000
用程序性能

PL/SQL的块结构运行一次性向数据库发送多条SQL语句,可以显著的提升应用程序的性能。在使用Java、.NET之类语言开发程序时,往往是一次一条SQL语句的方式操作数据库,这将会产生多次网络传输交互,是的服务器需要使用较多的资源来处理SQL语句,同时产生了一定的网络流量。

语言特性

PL/SQL块结构

块分为两种:

- 匿名块,没有名称的PL/SQL块,这种块不会保存在数据库中

- 命名块,具有名称的PL/SQL块

命名块又分为三种:

- 使用<<块名称>>进行标识的块

- 由函数或过程组成的子程序块,这种块保存在数据库中

- 数据库触发器块

变量和类型

标量变量:指能存放但是数值的变量,这是最常用的变量。标量变量的数据类型包含数字、字符、日期和布尔类型,比如VARCHAR2、CHAR、NUMBER、DATE等类型。

复合变量:指用于存放多个值得变量,比如PL/SQL记录、PL/SQL表、嵌套表及VARRAY等类型。

参照变量:指用于存放数值指针的变量,比如游标变量和对象变量。

LOB变量:指用于存放大批量数据的变量。

例如:

DECLARE
v_DeptName VARCHAR2(10);        --定义标量变量
v_LoopCounter BINARY_INTEGER;   --使用PL/SQL类型定义标量变量
--定义记录类型
TYPE t_Employee IS RECORD (EmpName VARCHAR2(20),EmpNo NUMBER(7),Job VARCHAR2(20));
v_Employee t_Employee;          --定义记录类型变量
TYPE csor IS REF CURSOR;        --定义游标变量
v_date DATE NOT NULL DEFAULT SYSDATE;--定义变量并指定默认值
BEGIN
NULL;
END;
/


程序控制语句

条件控制语句:IF-THEN-ELSE,CASE-WHEN

循环控制语句:LOOP-END简单循环,数字式FOR循环,WHILE循环

过程、函数与包

过程。函数与包都属于命名块,过程和函数统称为子程序。

触发器

与包或其他子程序不同的是,触发器不能被显式的调用,而是在数据库时间发生时隐式的运行的,并且触发器不能接收参数。

结构化异常处理

异常处理块以EXCEPTION开始。在错误发生时,Oracle预定义的异常会被系统隐式的抛出,对于用户自定义的异常,可以使用RAISE语句手动抛出。当异常被抛出后,异常处理器将捕捉到这些异常,然后执行异常处理代码。

集合与记录

集合与记录都是用复合类型。

集合允许将类型相同的多个变量当做一个整体进行处理,类似于Java或C语言中的数组,可以同时处理单行多列的数据。

记录允许将多个不同类型的变量当做一个整体进行处理,类似于数据库中的一条记录。一个记录类型可以包含多个简单类型的值或复杂类型的值。

游标

游标是一个指向上下文区域的指针,这个上下文区域是PL/SQL语句块在执行SELECT语句或DML数据操纵语句时分配的 。游标分为两种:

- 隐式游标:由PL/SQL自动为DML语句或SELECT-INTO语句分配的游标,包括只返回一条记录的查询操作。

- 显式游标:在PL/SQL块的声明区域中显示定义的,用来处理返回多行记录查询的游标。

动态SQL

PL/SQL是使用早期绑定来执行SQL语句的,早期绑定要求所处理的数据库对象必须存在并且是已知的。

动态SQL是指在运行时由字符串拼合而成的SQL,比如在PL/SQL块中不能执行DDL语句和DCL语句,那么可以使用EXECUTE IMMEDIATE来执行动态拼合而成的SQL语句。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: