PLSQL程序设计

合集下载

第2讲 PLSQL程序设计

第2讲 PLSQL程序设计
37
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程序设计

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

PLSQL程序设计

PLSQL程序设计
CREATE OR REPLACE PROCEDURE return_deptinfo( p_deptno emp.deptno%TYPE, p_avgsal OUT emp.sal%TYPE, p_count OUT emp.sal%TYPE) AS BEGIN SELECT avg(sal),count(*) INTO p_avgsal,p_count FROM emp WHERE deptno=p_deptno; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('The department don’’t exists!'); END return_deptinfo;
5
Oracle10g 数据库基础教程

参数说明

参数的模式



IN(默认参数模式)表示当过程被调用时,实参值被传递给形 参;在过程内,形参起常量作用,只能读该参数,而不能修改 该参数;当子程序调用结束返回调用环境时,实参没有被改变。 IN模式参数可以是常量或表达式。 OUT表示当过程被调用时,实参值被忽略;在过程内,形参起 未初始化的PL/SQL变量的作用,初始值为NULL,可以进行 读/写操作;当子程序调用结束后返回调用环境时,形参值被 赋给实参。OUT模式参数只能是变量,不能是常量或表达式。 IN OUT表示当过程被调用时,实参值被传递给形参;在过程 内,形参起已初始化的PL/SQL变量的作用,可读可写;当子 程序调用结束返回调用环境时,形参值被赋给实参。IN OUT 模式参数只能是变量,不能是常量或表达式。 6
10




Oracle10g 数据库基础教程
(2)存储过程的调用

PL SQL 程序设计

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编程语言的使用与程序设计

PLSQL编程语言的使用与程序设计

实验五 PL/SQL编程语言的使用与程序设计【开发语言及实现平台或实验环境】Oracle10g【实验目的】(1)了解PL/SQL在Oracle中的基本概念;(2)掌握PL/SQL的各组成部分;(3)PL/SQL的运用。

【实验原理】1.PL/SQL字符集和所有其他程序设计语言一样,PL/SQL也有一字符集。

读者能从键盘上输入的字符集是PL/SQL的字符。

此外,在某些场合,还有使用某些字符的规定。

我们将要详细介绍:● 用PL/SQL编程时可能使用的字符● 算术运算符● 关系运算符● 杂符号1)合法字符用PL/SQL程序时,允许使用下列字符:● 所有大、小写字母● 数字0到9● 符号:()+-*/〈〉=!~;:.‘@ %,“# $ ^ & _ | { } ? [ ]2)算术运算符下面列出了PL/SQL中常用的算术运算符。

如果读者使用过其他高级程序设计语言,想必不会陌生:表6 算术运算符运算符意义+ 加法- 减法* 乘法/ 除法** 幂关系运算符下面列出了PL/SQL中常用的关系运算符。

如果读者有使用其他程序设计语言的经验,一定见过这些符号:表7 关系运算符运算符意义<> 不等于!= 不等于^= 不等于< 小于> 大于= 等于3)杂符号PL/SQL为支持编程,还使用下述符号。

下面列出了部分符号,它们是最常用的,也是使用PL/SQL的所有读者都必须了解的。

表8 杂符号4)变量变量是PL/SQL中用来处理数据项所用的名字。

读者根据下列规则选择变量名称:● 变量必须以字母(A~Z)开头。

● 其后跟可选的一个或多个字母,数字(0~9)或特殊字符$、# 或_。

● 变量长度不超过30个字符。

● 变量名中不能有空格。

5)保留字保留字可视为PL/SQL版权所有的字符串。

在定义变量名时,读者不能使用这些保留字。

例如,词“loop”在PL/SQL中有特殊含义,因此下列代码是非法的:declareemployee varchar2(30);loop number;保留字不能用作变量名。

Les12_PLSQL程序设计

Les12_PLSQL程序设计



when others then 具体处理
Oracle的异常处理

系统定义例外
No_data_found Too_many_rows Zero_Divide Value_error (没有找到数据) (select …into语句匹配多个行) ( 被零除) (算术或转换错误) (在等待资源时发生超时)
Timeout_on_resource

用户定义的例外

演示:系统定义例外(被0除 Zero_Divide)
用户定义例外及处理例外

在declare节中定义例外
out_of exception ;

在可行语句中引起例外
raise out_of ;

在Exception节处理例外
when Out_of then …
赋值语句

var1:='this is a argument'; emp_rec.sal: = sal *2 + nvl(comm, 0); sum_sal:=sum_sal+v_sal; FETCH c1 INTO e_eno , e_sal ;

COMMIT语句

结束当前事务, 使当前事务所执行的全部修改永久化。
3. IF 条件 THEN 语句;
ELSIF 语句 THEN 语句; ELSE 语句;
END IF;
IF语句示例:

判断用户输入的数字,打印相关信息
按1:查询套餐流量,2:查询话费信息,其他:人工客服

提示:
从键盘输入: accept num prompt '请输入一个数字'; 得到键盘输入的值: pnum number := &num;

第13章 PLSQL程序设计

第13章 PLSQL程序设计
第13章 PL/SQL程序设计
内容提要
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块的权限, 而不是直接授予用户对数据库对象的操 作权限,提供了数据库的安全性。

第10章 PL-SQL程序设计

第10章 PL-SQL程序设计

游标的属性操作

游标属性用来获取游标状态。 游标属性用来获取游标状态。
名 称 %ISOPEN %FOUND %NOTFOUND %ROWCOUNT 说 明 逻辑值, 游标是否打开。 逻辑值 , 游标是否打开 。 如游标未打开其值为 False,反之为True。 ,反之为 。 逻辑值,游标是否找到一条记录。如游标找到记 逻辑值,游标是否找到一条记录。 录其值为True,反之为 录其值为 ,反之为False。 。 逻辑值, 游标没有找到记录, 逻辑值 , 游标没有找到记录 , 是 %FOUND属性 属性 的逻辑非。 的逻辑非。 返回提取游标记录的行数。 返回提取游标记录的行数。
%TYPE、记录和%ROWTYPE类型 、记录和 类型
• • • •
%TYPE类型:使一个变量与字段的数据类型保持一致 类型: 类型 当数据库表中的字段类型修改后, 。当数据库表中的字段类型修改后,PL/SQL程序中相 程序中相 应变量的类型也随之改变。 应变量的类型也随之改变。 记录类型:是用户自定义的数据类型, 记录类型:是用户自定义的数据类型,记录类型包含 一个或多个相关字段, 一个或多个相关字段,即字段包含的类型可以是不相 同的。通常记录类型用于保存表中记录的变量内容。 同的。通常记录类型用于保存表中记录的变量内容。 %ROWTYPE类型:可以完整的存放数据库表中的整 类型: 类型 行记录, 行记录,并可以使用游标或者游标变量来获取记录中 的数据。 的数据。 表类型( 表类型(略) 示例
本章要学习的内容
• • • • • • • •
PL/SQL语言基础 语言基础 PL/SQL控制结构 控制结构 PL/SQL记录和表 记录和表 游标 过程和函数 触发器 包 异常处理
PL/SQL语言基础 语言基础
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


例一
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 ;
open c1(v_depno) ;
例三
例题: 收发室收文件。文件分类,每类中文件依收到 日期先后顺序编号。值班人员收到文件后,要 在系统中登录文件类别,编号,收到日期。
(注:一天中收到的文件可能不止一份) 编一PL/SQL 程序,查询每一类中最后一天收
到的文件) 表clog(kno 类别 , pno 编号 , pdate 收发日期) 练习要点: 光标FOR循环,带参数的光标
where userid = tin_rec.ud ;
例一
if tin_rec.ps = v_passwd then insert into tout values(`login ok` );
else raise errps ;
end if ; exception when errps then
insert into tout values(`password error`〕; when no_data_found then insert into tout values(`userid error’〕; end;
例二
Close c1; insert into msg values(emp_num , s_sal) ; commit ; end;
光标for循环
For r in c1 loop
r.sal end loop;
如何打开光标 如何读光标区 如何判断读完 如何关闭光标
带参数光标
cursor c1 (depno char(3)) is select * from emp where dno=depno ;
显式光标
定义 delcare cursor c1 is select …
打开 open c1 读 fetch c1 into 变量/记录 close c1
显式光标
读取状态信息 c1%found c1%rowcound
用光标定义记录 temp c1%rowtype
例二
问题:
为职工长工资。从最低工资长,工资总额限 制在50万元。 Declare
二、PL/SQL程序设计
什么是PL/SQL
对SQL的扩充 过程化 后台技术
PL/SQL 程序结构
Declare begin
exception end /
变量类型
v_ename char(10) ; married boolean :=true ; v_ename emp.ename %TYPE ;
dup_val_on_index no_data_found too_many_rows
Select * into …
用户自定义例外
例外名定义 ex1 exception ;
引起例外 raise ex1 ;
例一
用户注册检查
tin : Ud
ps
tout :
msg
userlog : Userid passwd
光标
Oracle 使用Private SQL Area的工作区 执行SQL语句,并保存语句执行结果和 相关的状态信息。
光标是一个PL/SQL结构,利用光标可以 命名这些工作区,并通过光标访问工作 区中的信息。
隐式光标
隐式光标名:SQL 访问: SQL%ROWCOUNT SQL%FOUND SQL%NOTFOUND
cursor c1 is select eno,sal from emp order by sal for update of sal ;
emp_num number :=0 ; s_sal number ; e_sal number ; e_eno char(3);
例二
Begin open c1; select sum(sal) into s_sal from emp ; while s_sal<500000 loop fetch c1 into e_eno,e_sal ; exit when c1%notfound ; update emp set sal=sal*1.1 wwhheerereceunrroe=net_oefnco1 ;; s_sal:=s_sal + e_sal*0.1; emp_num:=emp_num+1 ; end loop ;
emp_rec emp % ROWTYPE ;
变量赋值 an_sal :=mon_sal *12 + nvl(comm,0) ;
Select ename INTO v_ename from emp where eno=` e01 ` ;
程序控制结构
IF e1 THEN ELSIF e2 THEN ELSIF e3 THEN ELSE
相关文档
最新文档