18-《PLSQL程序设计》
ORACLE_PLSQL程序设计

ORACLE_PLSQL程序设计Oracle PL/SQL是一种强大的编程语言,用于开发Oracle数据库的存储过程、触发器、函数和包。
本篇文章将探讨Oracle PL/SQL程序设计的基本概念、语法和功能,以及一些最佳实践和编程技巧。
PL/SQL是Oracle数据库的内置编程语言,它结合了SQL语句和面向过程的语言特性,可以实现复杂的业务逻辑和数据处理。
PL/SQL程序是在数据库服务器上执行的,它可以访问和操作数据库中的数据,并返回结果。
PL/SQL程序由块组成,一个块是一组PL/SQL语句的逻辑单元。
块由关键字BEGIN和END包围,可以包含变量声明、控制结构、异常处理和SQL语句等。
PL/SQL变量是用来存储和操作数据的命名对象,它可以是标量类型(如整数、字符、日期等)、集合类型(如数组、表)或记录类型。
变量可以在块内部声明,并且可以被块内的其他语句引用。
PL/SQL控制结构用于根据条件执行特定的代码块。
常见的控制结构有IF-THEN、IF-THEN-ELSE、CASE等。
这些控制结构可以根据条件执行不同的代码块,增强了程序的灵活性和可读性。
异常处理是PL/SQL程序设计的重要部分。
当出现意外情况或错误时,异常处理机制可以捕获异常并采取相应的措施。
PL/SQL提供了TRY-CATCH结构来处理异常,可以在CATCH块中编写相应的异常处理代码。
PL/SQL还支持存储过程、触发器和函数等数据库对象的定义和使用。
存储过程是一种一次性地执行一系列操作的程序,触发器是在数据库中发生特定事件时自动执行的程序,函数是返回一个值的程序。
这些数据库对象可以帮助我们实现复杂的业务逻辑和数据操作。
在PL/SQL程序设计中,有一些最佳实践和编程技巧值得注意。
首先,要注意代码的可读性和可维护性,良好的命名约定、适当的缩进和注释可以提高代码的可读性。
其次,需要注意异常处理,正确处理和记录异常可以提高程序的稳定性和可靠性。
第2讲 PLSQL程序设计

15.3 控制结构 选择结构 循环结构 跳转结构
38
15.3.1选择结构
IF语句
IF condition1 THEN statements1; [ELSIF condition2 THEN statements2;] …… [ELSE else_statements]; END IF; 注意 条件是一个布尔型变量或表达式,取值只能
数字类型 字符类型 日期/区间类型 行标识类型 布尔类型 原始类型 LOB类型 记录类型 集合类型
20
PL/SQL中常用的基本数据类型
分类
数字类型
字符类型
日期/区间类型 行标识类型
数据类型
NUMBER、BINARY_NUMBER PLS_NUMBER VARCHAR2、CHAR、LONG、
字符串比较
填充比较:通过在短字符串后添加空格,使两个字符串达到相 同长度,然后根据每个字符的ASCII码进行比较。
非填充比较:根据每个字符的ASCII码进行比较,最先结束的 字符串为小。
PL/SQL中规定,对定长的字符串(CHAR类型的字 符串和字符串常量)采用填充比较;如果比较的字符 串中有一个是变长字符串(VARCHAR2类型的字符 串),则采用非填充比较。
如果PL/SQL块相互嵌套,则在内部块中声明的变 量是局部的,只能在内部块中引用,而在外部块 中声明的变量是全局的,既可以在外部块中引用, 也可以在内部块中引用。
如果内部块与外部块中定义了同名变量,则在内 部块中引用外部块的全局变量时需要使用外部块 名进行标识。
27
<<OUTER>> DECLARE v_ename CHAR(15); v_outer NUMBER(5); BEGIN v_outer :=10; DECLARE v_ename CHAR(20); v_inner DATE; BEGIN v_inner:=sysdate; v_ename:='INNER V_ENAME'; OUTER.v_ename:='OUTER V_ENAME'; END; DBMS_OUTPUT.PUT_LINE(v_ename); END;
PLSQL程序设计

包括数值型(如NUMBER)、字符型(如VARCHAR2)、 日期型(如DATE)等。
01
集合数据类型
包括表、数组和集合,用于存储多个值。
02
03
自定义数据类型
使用COMMIT语句可以提交事务,将所有未提交的更改永久保存到数据库中。
感谢您的观看
THANKS
循环读取
使用循环结构(如WHILE循环)逐行读取游标中的数据。
异常处理
在读取游标数据时,应处理可能出现的异常,以确保程序的健壮 性。
游标的关闭
关闭游标
使用CLOSE语句关闭游标,释放与 游标相关的资源。
清理资源
关闭游标后,应释放所有与游标相关 的变量和资源,以避免内存泄漏。
06
PL/SQL事务处理
BEFORE触发器
在指定的事件(如INSERT、UPDATE或DELETE)之前执行的操作。
AFTER触发器
在指定的事件之后执行的操作。
INSTEAD OF触发器
用于视图,当对视图进行修改操作时,触发器中的操作替代了原本 的修改操作。
触发器的应用场景
数据完整性维护
触发器可用于确保数据的完整性,例如, 在更新员工工资时自动计算并更新员工
的总收入。
条件约束
触发器可用于实现复杂的业务规则, 例如,限制某些用户不能删除其他用
户的记录。
自动日志记录
触发器可以在数据修改时自动记录操 作日志,便于跟踪数据变更历史。
数据转换
触发器可以在数据修改时自动进行数 据转换或格式化,例如,将日期字段 自动转换为特定的格式。
05
PLSQL程序设计语言

PL/SQL:是过程化/sql的缩写,是Oracle在sql的基础之上扩展来的一种数据库编程语言,在兼容sql的基础之上,扩充了许多新功能,是面向过程化语言和sql的结合。
PL/SQL特点:·除了基本的sql之外,包含了控制结构和异常处理,从而具有了sql语句的简洁性和过程性。
·每个sql语句的请求处理,都会引起一次网络的传输,用户量一旦大量增加,可能会导致网络堵塞,而PLSQL是将整个语句块发送给数据库服务器,减少了网络通信的数量,提高了应用程序的运行效率。
·PLSQL语句是存储在Oracle服务器上,可以被其他的PLSQL程序或者sql调用。
具有很高的重用性。
·PLSQL程序语言是一种块结构语言,PLSQL的基本代为是块。
PLSQL程序块有两种:·匿名块:没有名称,只用一次,不能存储在数据库中·命名块:指的是保存在数据库中的PLSQL程序块,比如我们的存储过程、函数和触发器块的基本结构:·匿名块的基本结果declare:声明部分,用来声明程序中的变量、类型、游标等等。
begin:是PLSQL程序的主体部分,一般使用sql语句或者过程化语言来处理特定的操作。
exception:异常的处理部分,用来检查和处理异常或者错误。
块中的每一条语句都需要以分号结束,一条sql可以分成多行来写,但是最终只需要一个分号。
注释:在PLSQL中,注释分为两种,一种单行注释“--”,两外就是多行注释”/* 需要注释的内容*/”范例:向表中插入一笔数据并且提交。
声明常量和变量·声明常量:常量名constant 类型(长度) := 值constant:表示的就是固定不变的,就是我们说的常量。
声明之后不允许改变。
·声明变量:变量名类型(长度) (not null)(default | := )声明变量和常量中一些规则:·一行只能声明一个变量或者常量·变量时存储值的内存区域,用来处理程序中的值,变量名称不能重复,也不能使用系统关键字。
PL SQL 程序设计

使用 SELECT INTO 进行赋值
还可以按如下方法使用 SELECT INTO 对变量赋值
SELECT <列名> INTO <变量名> FROM <表名> WHERE <条件>;
示例
SELECT first_fare INTO oldfare FROM fare WHERE route_code = ‘SAN-LOU’;
PL/SQL中的逻辑操作符
operator AND operation 两个条件都必须满足
OR
NOT
只要满足两个条件中的一个
取反
注释的使用
添加注释可以提高程序的可读性并帮助
理解
PL/SQL 支持两种注释样式
–
单行注释
可以在行中的任何地方以双分号 (--) 开始 可以扩展到行尾
–
多行注释
PL/SQL 结构
一个标准 PL/SQL 代码段称作程序块 一个程序块是由三个部分或节构成的
–
声明部分
可执行部分
–
–
异常处理部分
PL/SQL 结构
DECLARE 声明 BEGIN 可执行语句 EXCEPTION 例外处理程序 END; PL/SQL 程序块的一部分
PL/SQL 结构
声明部分
操作符
与其他程序设计语言相同,PL/SQL有一系列操 作符。操作符分为下面几类: 1)算术操作符 2)关系操作符 3)比较操作符 4)逻辑操作符
PL/SQL中的算术操作符如下表
operator operation 加 减 除 乘
+ / *
**
乘方
PL/SQL中的关系操作符
PLSQL程序设计

…
例一
DECLARE tin_rec tin % rowtype ; v_passwd userlog.passwd % type ; errps EXCEPTION ;
BEGIN select * into tin_rec from tin ; select passwd into v_passwd from userlog
WHILE e LOOP
END LOOP ;
FOR i IN 1..10 LOOP
END IF;
END LOOP ;
EXIT [WHEN e] ;例外EXCEPTION WHEN 例外名1 THEN
… WHEN 例外名2 THEN
…… WHEN OTHERS THEN
…… END ;
系统预定义例外
begin
例三
For r1 in c1 loop
i := 0 ; for r2 in c2(r1.kno) loop
i := i + 1 ; if i=1 then
insert into tout values(r2.kno,r2.pno,r2.pdate); l_d:=r2.pdate; elsif r2.pdate = l_d then insert into tout values(r2.kno, r2.pno,r2.pdate); else exit; end if ; end loop; end loop ;
例三
Declare cursor c1 is select distinct kno from clog; cursor c2 (kindno char(3)) is select * from clog where kno=kindno order by day desc ; i number ; l_d date ;
第13章 PLSQL程序设计

内容提要
pl/sql 过程化的语言进行程序设计的基础 知识。
13.1 PL/SQL 基础知识
PL/SQL是过程化语言/sql的缩写,是 Oracle在SQL的基础上扩展开发的一种数 据库编程语言,在兼容标准SQL的基础上, 扩充了许多新的功能,是面向过程化的 语言与SQL语言的结合,特点如下:
(1) PL/SQL除了基本的SQL语句之外,还 包括了控制结构和异常处理,从而具有 SQL语言的简洁性和过程化的灵活性。 (2) 每个SQL语句的处理请求都将引起一 次网络传输,容易导致网络拥塞。而 PL/SQL是以整个语句块发给服务器的, 从而减少了网络通信流量,提高了应用 程序的执行速度。
(5) PL/SQL 是一种块结构语言,即构成 一个PL/SQL程序的基本单位是块。
13.1.1 PL/SQL块
1.基本结构 PL/SQL程序的基本单位是块,块分匿名 块、命名块两种。匿名块指未命名的块, 只能执行一次,不能存储在数据库中。 命名块指过程、函数、触发器和包等数 据库对象,它们存储在数据库中,可以 被多次调用执行。
匿名块的基本结构: [DECLARE] BEGIN [EXCEPTION] END;
以被命名和存储在Oracle 服务器中,同时也能被其他的PL/SQL程 序或SQL语句调用,任何客户、服务器工 具都能访问PL/SQL程序,具有很好的可 重用性。
(4)通过授予用户执行PL/SQL块的权限, 而不是直接授予用户对数据库对象的操 作权限,提供了数据库的安全性。
PL/SQL程序设计

PL/SQL程序设计PL/SQL是一种数据库编程语言,广泛应用于Oracle数据库管理系统中。
它是SQL的一种扩展,添加了过程性编程的特性,允许开发者创建更复杂、可重用的程序逻辑。
PL/SQL程序设计可以分为以下几个方面:1.PL/SQL的基本概念:PL/SQL是过程性语言和SQL结构的结合。
它使用块的概念,一个块由一个可选的声明部分、一个执行部分和一个可选的异常处理部分组成。
PL/SQL程序可以包含变量、常量、游标和异常处理等元素。
2.变量和数据类型:在PL/SQL中,可以通过声明变量来存储和操作数据。
PL/SQL中支持多种数据类型,包括基本的整型、字符型、日期型等,还可以自定义记录类型和表类型。
使用变量可以在程序中存储临时数据,进行运算和逻辑判断。
3.控制结构:PL/SQL支持多种控制结构,包括条件语句、循环语句和异常处理语句。
条件语句可以根据一些条件来执行不同的操作。
循环语句可以重复执行一段代码,直到满足退出条件为止。
异常处理语句用于捕获和处理运行时错误,保证程序的健壮性。
4.子程序:PL/SQL中的子程序可以是存储过程、函数或触发器。
存储过程是一段可重用的代码块,它可以在数据库中存储和调用。
函数是一个具有返回值的子程序,可以在SQL语句中使用。
触发器是与表相关联的特殊存储过程,当满足特定的条件时自动触发。
5.游标和异常处理:PL/SQL中的游标用于处理查询结果集。
游标可以使用循环语句来遍历结果集,并进行相应的操作。
异常处理是PL/SQL的一大特点,它可以有效地捕获和处理运行时错误。
在异常处理部分,可以指定对应不同类型错误的处理方式,例如日志记录、回滚事务等。
6.包和包体:PL/SQL中的包是一种逻辑上的封装,它可以包含变量、常量、游标和子程序等。
包体是包的实现部分,声明和定义了包中的各个元素。
使用包可以将相关的数据和逻辑组织在一起,提供更好的可维护性和可重用性。
7.异常处理和日志记录:在实际的PL/SQL开发中,异常处理是非常重要的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LOOP
PL/SQL 程序流程控制结构
PL/SQL 程序流程控制结构演示 DEMO
异常处理
异常概述 在PL/SQL中,警告信息、出错信息、或返回信息 统称为异常(Exception)。ORACLE有两类异常: 预定义异常: 是由PL/SQL运行过程中,系统自动产 生的信息 用户自定义异常: 是用户根据需要,自己定义使用 的异常,执行时由用户自己引起
PL/SQL程序设计
课程目标
课程目标: 课程目标:
PL/SQL概述 PL/SQL概述 PL/SQL程序基本语法要素 PL/SQL程序基本语法要素 PL/SQL程序流程控制结构 PL/SQL程序流程控制结构 PL/SQL程序异常处理 PL/SQL程序异常处理
PL/SQL概述
PL/SQL简介
标准化的 SQL 语言对数据库进行各种操作,每次只能 执行一条语句,语句以英文的分号“;”为结束标识,这样 使用起来很不方便,同时效率较低;它侧重于后台数据库的 管理,因此提供的编程能力较弱,而结构化编程语言对数据 库的支持能力又较弱。 如果复杂的管理任务都要借助编程语言来实现的话,这 对管理员来讲是很大的负担。正是在这种需求的驱使下,从 Oracle 6 开始,Oracle 公司在标准 SQL 语言的基础上发 展了自己的 PL/SQL(Procedural Language/SQL,过程化 SQL 语言)语言,将变量、控制结构、过程和函数等结构化 程序设计的要素引入了 SQL 语言中,这样就能够编制比较 复杂的 SQL程序了,利用 PL/SQL 语言编写的程序也称为 PL/SQL 程序块。
常见数据类型
PL/SQL 程序基本语法要素
PL/SQL程序演示 PL/SQL程序演示 DEMO
PL/SQL 程序基本语法要素
演示小结 1、%type和%rowtype的使用 2、从结果集中向变量赋值 3、使用注释 4、结果输出Leabharlann PL/SQL 程序流程控制结构
条件结构 IF boolean_expression1 THEN sequence_of_statements; [ ELSIF boolean_expression2 THEN sequence_of_statements;] … [ELSE sequence_of_statements;] END IF;
PL/SQL 程序基本语法要素
PL/SQL语句块结构 PL/SQL语句块结构 1、定义部分: 以 Declare 为标识,在该部分中定 义程序中要使用的常量、变量、游标和例外处 理名称,PL/SQL 程序中使用的所有定义必须在 该部分集中定义,而在高级语言里变量可以在 程序执行过程中定义。 2、执行部分: 以begin为开始标识,以end为结束 标识。该部分是每个PL/SQL程序所必备的,包 含了对数据库的操作语句和各种流程控制语句。 3、异常处理部分: 该部分包含在执行部分里面,以 exception 为标识,对程序执行中产生的异常情 况进行处理。
PL/SQL概述
PL/SQL特点 PL/SQL特点 1、具有模块化的结构。 2、使用过程化语言控制结构。 3、能够进行错误处理。 PL/SQL程序块只能在SQLPlus、SQLPlus Worksheet等工具支持下以解释型方式执行,不能 编译成可执行文件,脱离支撑环境执行。
PL/SQL 程序基本语法要素
PL/SQL 程序流程控制结构
CASE结构( CASE结构(2) 结构 CASE WHEN test1 THEN sequence_of_statement1; WHEN test2 sequence_of_statement2; … ELSE else_statement END CASE;
PL/SQL 程序流程控制结构
PL/SQL 程序基本语法要素
变量声明 variable_name type [constant] [not null] [ := value]; 变量赋值 variable_name := expression; 从外部获取变量值 variable_name := &inputname;
PL/SQL 程序基本语法要素
PL/SQL 程序流程控制结构
CASE结构( CASE结构(1) 结构 CASE test_var WHEN value1 THEN sequence_of_statement1; WHEN value2 sequence_of_statement2; … ELSE else_statement END CASE;
异常处理
异常处理演示 DEMO
异常处理
演示小结 1、异常处理步骤 2、常见预定义异常
循环结构 1、LOOP sequence_of_statement; END LOOP; 2、WHILE condition LOOP sequence_of_statement; END LOOP; 3、FOR loop_counter IN [REVERSE]low… high sequence_of_statement; END LOOP;
PL/SQL语句块结构 PL/SQL语句块结构 DECLARE /* Declarative section – pl/sql variables,types,cursors and local subprograme go here */ BEGIN /* Executable section - procedural and SQL statements go here */ EXCEPTION /* Exception handling secting–error– handling statements go here */ END;