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

什么是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个程序单元,可以将程序分成多个部分,将复杂的问题划分开来,做到模块化。

提高应用程序性能

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语句。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值