PLSQL程序设计
第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程序设计
5
Oracle10g 数据库基础教程
参数说明
参数的模式
IN(默认参数模式)表示当过程被调用时,实参值被传递给形 参;在过程内,形参起常量作用,只能读该参数,而不能修改 该参数;当子程序调用结束返回调用环境时,实参没有被改变。 IN模式参数可以是常量或表达式。 OUT表示当过程被调用时,实参值被忽略;在过程内,形参起 未初始化的PL/SQL变量的作用,初始值为NULL,可以进行 读/写操作;当子程序调用结束后返回调用环境时,形参值被 赋给实参。OUT模式参数只能是变量,不能是常量或表达式。 IN OUT表示当过程被调用时,实参值被传递给形参;在过程 内,形参起已初始化的PL/SQL变量的作用,可读可写;当子 程序调用结束返回调用环境时,形参值被赋给实参。IN OUT 模式参数只能是变量,不能是常量或表达式。 6
10
Oracle10g 数据库基础教程
(2)存储过程的调用
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编程语言的使用与程序设计
实验五 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程序设计
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 := #
第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块的权限, 而不是直接授予用户对数据库对象的操 作权限,提供了数据库的安全性。
第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语言基础 语言基础
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开发中,异常处理是非常重要的。
PLSQL程序设计(基础篇)
PL/SQL的基本结构如下:
Declare
在这里可以定义变量、常量、异常等。
Begin
在这儿可以写一些执行SQL或PL/SQL语句。
源码:
说明:源码都是由PL/SQL Developer 8开发,于Oracle10g测试
-- Created on 2010-4-27 by Quasar
/*
这就是
你的第一个程序了,也是我的,哈哈
*/
declare
msg varchar2(15);--定义变量
begin
msg := 'Hello World';--赋值
from emp left outer join dept-- 1确定表
using(deptno)
where deptno > 0-- 2确定行(记录)
group by dname-- 3将行分组
having max(comm) is null or max(comm) > 0-- 4对组筛选
order by dname-- 6对结果集排序
dbms_output.put_line('Oracle第一个员工的信息:');
dbms_output.put_line('员工号:'||eno);
dbms_output.put_line('员工姓名:'||empname);
dbms_output.put_line('职位:'||empjob);
PLSQL程序设计主要内容PLS...
PL/SQL程序设计主要内容:PL/SQL 语言的基本特征、PL/SQL程序的结构、PL/SQL语言的控制结构、游标(cursor)编程、错误处理、存储过程和函数、创建包(Package)、触发器(Trigger)。
第一章PL/SQL 语言的基本特征1. 什么是PL/SQL?PL/SQL是Procedure Language & Structured Query Language 的缩写。
SQL SERVER:Transaction-SQL。
PL/SQL 可分为两种:数据库PL/SQL和工具PL/SQL。
两者的编程非常相似。
都具有编程结构、语法和逻辑机制。
主要介绍数据库PL/SQL内容。
工具PL/SQL用于Oracle的客户端开发工具。
工具PL/SQL另外还增加了用于支持工具(如ORACLE Forms)的句法,如:在窗体上设置按钮等。
Oracle的客户端开发工具Oracle iDS(Developer Studio)Release 2 (10.2)包括的软件:Oracle10g JDeveloper -JAVA开发工具Oracle10g Forms Developer -窗体开发Oracle10g Designer -数据库工具Oracle10g Software Configuration Manager -软件配置Oracle10g Reports Developer -报表开发Oracle10g Discoverer AdministratorOracle10g Warehouse Builder -数据仓库Oracle10g Business Intelligence Beans -商业智能2. PL/SQL 语言的特征支持SQL语言、支持面向对象编程、可移植、与Oracle集成。
PL/SQL程序不区分大小写。
字符串数据区分大小写。
3. PL/SQL 可用的SQL语句在PL/SQL中可以使用的SQL语句有:INSERT,UPDATE,DELETE,SELECT INTO,COMMIT,ROLLBACK,SAVEPOINT。
Chapter 06_PLSQL程序设计
– 请看案例6
使用%rowtype属性定义记录型变量 – 使用%type可以使变量获得字段的数据类型,使用 %rowtype可以使变量获得整个记录的数据类型。该属性 可以基于表或视图定义记录变量。为了简化表或视图所 有列数据的处理,应该使用该属性定义记录变量。
存储过程
• 与其它的数据库系统一样,Oracle的存储过程是用PL/SQL语 言编写的能完成一定处理功能的存储在数据库字典中的程序。 – 创建过程语法: CREATE [OR REPLACE] PROCEDURE 过程名 [ (参数名 [ { IN | IN OUT }] 数据类型„.)] { IS | AS } PL/SQL块 请看案例7:创建一个存储过程sp_pro1 ,用于实现向 mytest表中添加数据 先创建一张mytest表create table mytest(id number);
• FOR循环 – 格式: FOR 循环控制变量 IN [ REVERSE ] 下界值..上界 值 LOOP statement1; statement2; END LOOP; – 当使用FOR循环时,每次循环时循环控制变量会自动 增一;如果指定REVERSE选项,那么每次循环时循环控 制变量会自动减一。 – 案例17:将案例15使用for循环实现
• 建立OUT参数的存储过程 – 过程不仅可以用来执行特定操作,而且也可以用于输出 数据,在过程中输出数据是使用OUT参数来完成的,当 定义输出参数时,必须提供OUT关键字。 – 请看下面的案例,利用in和out参数传递的方式调用一 个存储过程 【案例9】创建一个过程,从emp表中带入雇员的姓名, 返回该雇员的薪水值。(out参数,然后调用过程,请 同学们先编写这个过程
DECODE()函数 和case表达式类似,decode()函数也用于实现多路分支结构 select empno, ename, sal, decode(deptno, 10, '财务部', 20, '研发部', 30, '销售部', '未知部门') 部门 from emp;
第16章 PLSQL程序设计2
Oracle10g 数据库基础教程
第16章 PL/SQL程序设计
18
2009
Oracle10g 数据库基础教程
16.3.3跳转结构
语法格式:
《标号》
… GOTO 标号;
说明:
块内可以跳转,内层块可以跳到外层块,但外层块不
能跳到内层。 IF语句不能跳入。不能从循环体外跳入循环体内。不 能从子程序外部跳到子程序中。 由于goto语句的缺点,建议尽量少用甚至不用goto语 句。
Oracle10g 数据库基础教程
DECLARE v_deptno emp.deptno%TYPE; CURSOR c_emp IS SELECT * FROM emp WHERE deptno=v_deptno; v_emp c_emp%ROWTYPE; BEGIN v_deptno:=&x; OPEN c_emp; LOOP FETCH c_emp INTO v_emp; EXIT WHEN c_emp%NOTFOUND; DBMS_OUTPUT.PUT_LINE(v_emp.empno||' '|| v_emp.ename||' '|| v_emp.sal ||' '|| v_deptno); END LOOP; CLOSE c_emp; END;
1
2009
Oracle10g 数据库基础教程
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;保留字不能用作变量名。
plsql课程设计
pl sql课程设计一、课程目标知识目标:1. 理解PL/SQL基本概念,掌握其作为Oracle数据库编程语言的特点及应用场景。
2. 学会基本的PL/SQL语法结构,包括变量声明、数据类型、控制结构(IF、LOOP、CASE)和异常处理。
3. 掌握使用PL/SQL编写存储过程、函数和触发器,并能应用于实际数据库设计和维护中。
技能目标:1. 能够运用PL/SQL编写简单的程序,进行基本的数据库操作。
2. 能够独立创建存储过程、函数和触发器,实现对数据库的复杂操作和事务控制。
3. 能够通过调试和优化PL/SQL代码,提高程序的性能和可维护性。
情感态度价值观目标:1. 培养学生对数据库编程的兴趣,激发其探索数据库技术的热情。
2. 培养学生团队协作意识,学会在项目中与他人共同解决问题,共同进步。
3. 培养学生严谨、踏实的编程态度,养成良好的编程习惯和代码规范。
课程性质:本课程为高年级数据库编程课程,以实践为主,理论联系实际,注重培养学生的动手能力和实际应用能力。
学生特点:学生具备一定的数据库基础,了解SQL语言,对编程有一定的兴趣和基础。
教学要求:教师应采用案例教学法,结合实际项目案例进行教学,引导学生主动参与,注重实践操作,提高学生的编程技能和应用能力。
同时,关注学生个体差异,给予个性化指导,确保每位学生都能达到课程目标。
通过课程学习,使学生能够独立完成PL/SQL编程任务,为后续从事数据库相关工作和进一步学习打下坚实基础。
二、教学内容1. PL/SQL基础概念:介绍PL/SQL的特点、作用及其在Oracle数据库中的应用。
- 章节关联:课本第1章“PL/SQL基础”- 内容列举:PL/SQL块结构、变量声明、数据类型、运算符、表达式。
2. 控制结构:讲解如何使用IF、LOOP、CASE等控制结构进行逻辑判断和循环操作。
- 章节关联:课本第2章“控制结构”- 内容列举:条件判断、循环控制、分支选择。
3. 异常处理:学习如何处理程序中可能出现的错误和异常情况。
PLSQL程序设计培训教程
1-17
• • • • • •
规则3 规则 每个if语句有且只有一个 每个 语句有且只有一个else。 语句有且只有一个 。 规则4 规则 Else语句行后面不跟语句结束符。 语句行后面不跟语句结束符。 语句行后面不跟语句结束符 3 if-then-elsif 这种结构用于替代嵌套if-then-else结构。例子如 结构。 这种结构用于替代嵌套 结构 下页所示。 下页所示。
1-18
• • • • • • • • •
1-19
If var1>var2 then DBMS_OUTPUT.put_line(‘var1 is larger than var2’); elsif var1=var2 then DBMS_OUTPUT.put_line(‘var1 is equal to var2’); else DBMS_OUTPUT.put_line(‘var1 is smaller than var2’); End if; 规则5 规则 elsif无匹配的 无匹配的end if。 无匹配的 。
•
DBMS_OUTPUT.put_line(‘Radius=’ || TO_CHAR(radius) || ‘,Circumference= ‘ || TO_CHAR(Circumference) || ‘,Area= ‘ || TO_CHAR(Area)); END;
•
1-9
•
显示了PL/SQL引擎在 引擎在Oracle服务器中的位置 图5.2显示了 显示了 引擎在 服务器中的位置
1-4
• • • • • • • • • •
1-5
5.1.2 数据类型 BINARY_INTEGER NUMBER(精度 比例 精度,比例 精度 比例) CHAR(长度 长度) 长度 VARCHAR2(长度 长度) 长度 DATE ROWID 存储数据库表中每一行的物理地址 UROWID 存储数据库表中每一行物理的、逻辑的 存储数据库表中每一行物理的、 或外部的( 或外部的(非Oracle的)地址 的 BOOLEAN
PLSQL程序设计
PLSQL程序设计PL/SQL(Procedural Language/Structured Query Language)是一种编程语言,被广泛用于Oracle数据库管理系统中。
它结合了SQL的优势和过程化编程的能力,允许开发人员编写复杂的程序来处理和管理数据。
PL/SQL的程序设计主要包括声明变量、控制结构、循环语句、异常处理和存储过程等。
首先,PL/SQL允许开发人员在程序中声明变量,这些变量可以存储数据,以供程序使用。
在声明变量之后,可以对其进行赋值和引用。
PL/SQL支持多种数据类型,包括数字、字符、日期和布尔值等。
其次,PL/SQL提供了控制结构,可以根据不同的条件来执行不同的代码块。
常用的控制结构包括条件语句(IF-THEN-ELSE)、CASE语句和循环语句(FOR、WHILE)。
这些结构使得开发人员可以根据需要来控制程序的执行流程。
异常处理是PL/SQL的一个重要特性。
通过使用TRY-CATCH块,可以捕捉和处理程序中可能发生的异常。
开发人员可以定义自己的异常,并根据需要采取适当的措施来处理异常,例如记录日志、回滚事务等。
存储过程是PL/SQL的一个重要组成部分。
它允许开发人员将一组SQL语句封装为一个可重复使用的块,并且可以在数据库中进行存储,以便其他程序可以调用。
存储过程在提高性能、简化复杂操作和增强数据安全性方面具有广泛的应用。
此外,PL/SQL还提供了许多其他功能,如游标(用于处理查询结果集)、函数(用于返回单个值)和触发器(用于在数据发生变化时执行相应的操作)等。
这些功能使得开发人员可以更高效地处理和管理数据。
总结起来,PL/SQL是一种强大的程序设计语言,适用于处理和管理Oracle数据库中的数据。
它结合了SQL的优势和过程化编程的能力,在开发数据库应用程序时具有很大的优势。
通过灵活运用PL/SQL的各种功能,开发人员可以编写高效、可靠和安全的程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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