PLSQL程序设计(基础篇)

合集下载

第18章 PLSQL基础

第18章  PLSQL基础

18.2.1
标识符
标识符可以由字母、数字、下划线、货币符号和“#” 字符组成,并且必须以字母开头,其最大长度为30个字符。 使用标识符可以用来命名PL/SQL语句块中的变量、常量、 数据类型、游标、参数、子程序(包括存储过程、函数和包 )的名称。 除了上面讲到的标识符定义之外,在PL/SQL语句块中 定义变量、常量、数据类型、游标、参数、子程序的名称时 ,还需要注意以下一些规则。 PL/SQL语句块中的标识符不区分大小写。例如,变量 v_stuName和变量v_STUNAME表示的意义相同。
18.1.4 子程序
带参数的过程 CREATE OR REPLACE PROCEDURE insert_student( p_ stuID VARCHAR2(15), p_ stuName VARCHAR2(10), p_age NUMBER(2), p_ sex VARCHAR2 (20), p_ birth DATE) AS BEGIN …….. END;
18.1.3
命名语句块
所谓命名语句块,顾名思义,就是给与特定名称的 PL/SQL 语句块。它与匿名语句块用法基本相同,也只能执 行一次,一般都是动态生成的。 如果要为匿名语句块加入相应的名字,可以使用 “<<>>”对其进行标记。
18.1.3
命名语句块

<<insert_student>> DECLARE v_ stuID VARCHAR2(15) := 's145203'; v_ stuName VARCHAR2(10):= '杜玉'; v_age NUMBER(2) :=22; v_ sex VARCHAR2 (20) :=’女’; v_ birth DATE :=’19870513’; BEGIN /* *插入学生信息 */ INSERT INTO t_student VALUES(v_ stuID, v_ stuName, v_age, v_ sex, v_ birth); /* *根据学生编号查询学生姓名 */ SELECT stuName INTO v_stuName FROM t_student WHERE stuID = v_ stuID; DBMS_OUTPUT.PUT_LINE (‘学生姓名为’|| v_stuName); 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编程基础

DATE; NUMBER(2) NOT NULL := 10; VARCHAR2(13) := 'Atlanta'; CONSTANT NUMBER := 1400;
13
声明PL/SQL Variables
规则
¯ 遵循命名的惯例。 ¯ 初始化NOT NULL型变量。 ¯ 用赋值操作符(:=) 或用DEFAULT关键字给
END;
6
匿名块
应用程序 触发器
数据库 触发器
程序结构
DECLARE BEGIN EXCEPTION END;
已存储的 过程/函数
应用程序中的 过程/函数
打包的 过程/函数
7
程序结构
描述
适用性
匿名块 已存储的 过程/函数 应用程序中的 过程/函数

数据库 触发器
未被命名的PL/SQL块;可嵌入到应 用程序中亦可交互使用。
256120.08to the proposition that all men are created equal.”
Atlanta
12
声明 PL/SQL 变量
语法
identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr];
举例
Declare v_hiredate v_deptno v_location c_ comm
使用TO_DATE 转换函数可改正错误。
v_date := TO_DATE ('January 13, 1998', 'Month DD, YYYY');
36
嵌套块和变量的作用域
只要可执行的语句能运行,其所在的 块就能被嵌套。

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中的关系操作符

第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块的权限, 而不是直接授予用户对数据库对象的操 作权限,提供了数据库的安全性。

PLSQL编程基础

PLSQL编程基础

PLSQL编程基础--PL/SQL PROCEDURAL LANGUAGE /SQL/*块结构变量和类型条件循环游标过程函数包*/--块结构/*pl/sql程序的基本单元是语句块。

所有pl/sql程序都是由语句块组成的:顺序或嵌套。

语句块的两种类型:匿名的和命名的。

匿名语句块:通常是动态⽣成的,它只能执⾏⼀次。

命名语句块:是指具有名字的语句块。

声明部分:变量声明 delcare执⾏部分:begin异常处理部分:exceptionend命名语句块包括:1)标号语句块,⼀种带有标号的匿名语句块,该标号为该语句块指定了⼀个名字。

动态⽣成,只能执⾏⼀次。

2)⼦程序,包括过程和函数。

3)触发器。

*/--匿名语句块DECLAREv_print INT := 1;BEGINdbms_output.put_line('v_print = '||v_print); 打印END lbl_1;/--带有标号的命名语句块,放在DELARE前⾯<>DECLAREv_print INT := 1;BEGINdbms_output.put_line('v_print = '||v_print);END lbl_1;/--存储过程CREATE OR REPLACE PROCEDURE p_1 ASv_print INT := 1;BEGINdbms_output.put_line('v_print = '||v_print);END p_1;/--基本块结构/*三个基本的部分:声明部分、执⾏部分和异常处理部分。

执⾏部分是必须的,其他部分可选。

declare_statements包含在声明块中,它负责该声明块其他部分将会使⽤的变量。

executable_statements是块中实际可以执⾏的语句,包括条件、循环等语句exception_handle_statements 负责处理可执⾏语句中可能发⽣的任何错误。

第6章 PLSQL 编程基础

第6章 PLSQL 编程基础

6.2
声明及变量
• 声明:声明部分用来声明变量、常量、异常处 理、游标等,以declare开始。
变量声明
• 变量的作用是用来存储数据,可以在过程语句中 使用。变量在声明部分可以进行初始化,即赋予 初值。变量在定义的同时也可以将其说明成常量 并赋予固定的值。
变量的命名规则
• 以字母开头,后跟其他的字符序列,字符序列中 可以包含字母、数值、下划线等符号,最大长度 为30个字符,不区分大小写。 • 不能使用Oracle的保留字作为变量名。 • 变量名不要和在程序中引用的字段名相重,如果 相重,变量名会被当作列名来使用
PL/SQL 的优点
• • • • • 代码可以使用任何文本编辑器编写,方便 更佳性能、可移植性、模块化结构 整个语句块发送,提高了效率,避免了网络拥挤 过程化语言的控制结构(顺序、分支、循环)。 能进行错误处理。
本章学习目标:
• • • • • • • 学习PL/SQL程序块的结构 PL/SQL程序中使用的数据类型 如何在PL/SQL中使用各种变量和常量 PL/SQL程序的条件判断语句 PL/SQL程序的循环控制语句 在PL/SQL程序使用游标处理表中的信息 了解PL/SQL程序中的Oracle异常处理
• END;
• 执行结果:
MANAGER 0 18-4月 -03 8.25
• PL/SQL 过程已成功完成。 • 说明:本训练共定义了 6 个变量,分别用“ := ”赋值运算符 或 DEFAULT 关键字对变量进行了初始化或赋值。其中: c_tax_rate为常量,在数据类型前加了 “CONSTANT” 关 键字; v_valid 变量在赋值运算符前面加了关键字“ NOT NULL ”,强制不能为空。如果变量是布尔型,它的值只能 是“TRUE ”、“ FALSE ”或“ NULL ”。本练习中的变量 v_valid布尔变量的值只能取“TRUE”或“FALSE”。

《PLSQL基础》课件

《PLSQL基础》课件
2 函数的定义和应用
掌握函数的创建和使用,以便在SQL查询中返回计算结果。
3 区别和联系
比较存储过程和函数的差异,了解它们在不同场景下的应用。
游标和触发器
1 游标的概念和用法
了解如何使用游标在PLSQL中处理查询结果集。
2 触发器的概念和应用
学习如何创建和使用触发器来自动触发数据库操作。
3 难点分析
1 条件判断语句
掌握IF-THEN、IF-THEN-ELSE和CASE语句,用于根据条件执行不同的代码块。
2 循环语句
学习FOR、WHILE和LOOP语句,以便重复执行代码块。
3 例外处理语句
了解如何处理异常情况,确保代码的可靠性和稳定性。
存储过程和函数
1 存储过程的定义和应用
学习如何创建和调用存储过程,以实现具有复杂逻辑的数据库操作。
了解在哪些场景下使用PLSQL可以极大地提升开发效率和数据处理能力。
2 知识点回顾
复习本课程的核心知识点,加深对PLSQL的理解和掌握。
3 后续学习建议
给出一些建议,帮助学员继续深入学习和应用PLSQL。
PLSQL具有高性能、可扩展性和安全性,它可以有效地处理大量数据和复杂的业务逻辑。
变量与数据类型
1 变量的定义
学习如何声明和使用变量,以存储和操作数据。
2 数据类型的分类和应用
了解各种数据类型的特性和用法,包括数字、字符、日期等类型。
3 常量的定义和应用
学习如何定义和使用常量,以存储不可变的值。
控制语句
探讨使用游标和触发器时可能遇到的常见问题和解决方法。
高级技巧
1 包的定义和使用
了解包的概念和结构,学习如何使用包来组织和管理PLSQL代码。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录
PL/SQL程序设计(上册)1
第一章认识PL/SQL3
第二章SQL回顾5
第三章PL/SQL的基本结构7
第四章PL/SQL的数据类型及使用10
第五章流程控制29
第六章游标35
第七章异常处理46
第八章下册预知49
这一章主要记录了两个问题:1什么是PL/SQL?2 PL/SQL有什么优势?下面从这两个问题展开论述。
dbms_output.put_line('Oracle第一个员工的信息:');
dbms_output.put_line('员工号:'||eno);
dbms_output.put_line('员工姓名:'||empname);
dbms_output.put_line('职位:'||empjob);
end;
binary_float和binary_double是Oracle 10g的新数据类型,注意在赋值时格式分别如下:223.4323f和23423.4545d,像Java吧,可能都遵循IEEE-754的浮点数标准吧。
布尔:Boolean
布尔值分别为:TRUE、FALSE、NULL
日期:Date和Timestamp
按照形式,可分为命名的PL/SQL和匿名的PL/SQL,其中,命名的,又可以分为子程序和触发器,而子程序又可以分为包、函数、过程。是不是有点儿 ?不过不要紧,等你看过整个文章,再回来看就是很简单了。
PL/SQL的基本结构如下:
Declare
在这里可以定义变量、常量、异常等。
Begin
在这儿可以写一些执行SQL或PL/SQL语句。
本章将从PL/SQL的分类、PL/SQL的基本结构以及第一个PL/SQL程序展开。
PL/SQL的分类:
按照PL/SQL的运行环境,可以分为客户端PL/SQL和服务器端PL/SQL。通常,我们(指开发者)接触到的PL/SQL都是存储在服务器Oracle数据库中的,所以主要学习这一种就可以了,至于客户端的PL/SQL,我也不太了解啊…,o(︶︿︶)o唉希望大虾在与我联系,加上啊!
所以在使用时一定注意,带有group by后,having和select中只能有-分组字段和聚集函数
DML:
insert into values就不再重复了,不过听说现在可以一次性向多个表中插入呢,使用insert into all和insert into first,具体用法如下:
insert into all/first
Date默认只显示日期,而Timestamp默认情况下会显示时间信息,还有上下午标志呢,Timestamp是Oracle 9i新加入的数据类型。
标量的定义格式:
vname DATATYPE [CONSTANT][NOT NULL] [:= / DEFAULT exp]
例如:
name varchar2(30);
PL/SQL的变量类型可以分为标量、复合类型、参照类型和LOB类型四类,下面就分别介绍给大家。
标量,就是单值变量,这么说应该可以理解吧。常用的类型如下:
字符串:varchar2(n)、char(n)、long、long raw
在程序设计中,常常用到字符串的处理,在PL/SQL中,有很好的支持,不但有字符串函数,还有对正则表达式的支持。我们最常用的数据类型就是varchar2(n)了,n用于最大字符长度。其中,char和long、long raw不推荐使用,原因是:前者浪费资源后者不够灵活。
dbms_output.put_line(msg);--内置包使用
end;
运行结果:
Hello World
PL/SQL的注释可以通过这个程序看出来啊,自己看吧,不多说了…
本章将介绍PL/SQL的数据类型,有些数据类型很“简单”,有些很难理解,不过都是因为这些数据类型你没有使用过,用几次就知道了,在这里,先认识认识它们,不熟也没关系。
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对结果集排序
如上的源码表示了SQL语句的执行顺序,这个一定要理解好啊!
思考题:
问题:为什么带有group by的select和having只能含有分组字段和聚集函数呢?
答:因为group by分组后,只能对组进行操作了。也就是说,无论你是筛选行having还是列select,都要以组为单位进行,所以只能使用组共有的属性,除了分组字段外,只有像什么每组的最大值啊、最小值啊、平均值啊等等这些组的特性或叫组员共有的特性。
Exception
这儿可以捕获并处理异常
怎样在发生异常后让程序继续执行其他语句呢?
答:写在这块儿不就得了,呵呵
End;结束了,别忘了“;”啊,呵呵
你的第一个程序?也是我的,“hello, world!”
有人说hello world太老套了,boring,有什么,在你什么都不懂时还能开发出更高级的么,我们就hello world呵呵。
什么是PL/SQL?
PL/SQL即procedural language/standard query language, PL/SQL是具备程序设计语言特性(如:定义变量、流程控制、面向对象等)的、关系数据库标准查询语言SQL的过程性拓展(procedural extension)。
SQL是非过程语言,非过程,让我理解,就是不用你了解语句的处理过程,而直接达到开发者的目的。如:select name from student这条语句,就是向数据库说:“我要学生的姓名”,然后数据库就会返回相应的字段值而我们并不知道它是如何处理的也基本无法控制。而PL/SQL语言,则具备程序设计语言甚至高级程序设计语言的特点,更好地满足我们对数据的操作。
PL/SQL有什么优势?
PL/SQL的优势可以概括为以下五点(待补充):
1具备程序设计语言的特性(模块化、信息隐藏、面向对象等);
2异常处理,PL/SQL具备异常处理的机制;
3可移植,想想Java吧,看看两者有什么共同之处?PL/SQL的JVM就是Oracle Server,呵呵
4改善性能,一方面,通过PL/SQL语句块(Block)可以一次性向Oracle Server发送多个SQL语句,减少网络的传输;另一方面,有些PL/SQL可以在客户端执行(前提是某些客户端含有PL/SQL引擎),可以有效的减少与Oracle Server的交互;再有,PL/SQL通常会存储在Oracle数据库中,这对于网络程序来说真是天降福音,因为,这样一系列的处理交互,都可以以一个调用数据库本身存在的程序而完成,大大提高了性能。
when条件then into表1
when条件then into表2
when条件then into表3
else into表4
select from表源
至于ALL和FIRST的区别就是:如果是ALL,就会插入所有满足条件的表,而如果是FIRST直插入第一个满足条件的表。
TCL:
commit;
rollback to A;
savepoint A;
不多写了,因为我也只知道这点儿了,呵呵,不过听说SQL有个优化hint挺好玩,如:insert /+append+/ into table values XXX;还有对Group by的拓展rollup和cube,还有grouping函数、group set等,以后再研究把,谁让俺是菜鸟呢?
5可以与SQL交互,在PL/SQL中可以嵌入SQL的DML、DQL、TCL(事务控制语言)语句。
你都开始对PL/SQL感性趣了,那么SQL肯定是多多少少听说过的,呵呵,就回顾一些基础吧,那些拓展的内容,建议是遇见了再研究吧。
DQL:
源码dql.sql:
select dname, max(sal)-- 5对列筛选(分组字段或聚集函数)
光说不练犯晕啊,呵呵,下面就看一些记录的应用吧。
源码record.tst:
-- Created on 2010-4-27 by Quasar
declare
--通过自定义和%ROWTYPE属性定义变量
REAL_NAME varchar2(30) constant default ‘魏照哲’;
name varchar2(10) := ‘hello’;
下面是一个标量使用的例子程序:
源码:scalar.tst
例子程序来自scott/scott用户或hr/hr用户(alter user scott account unlock解锁)
数字:number(m, n)、binary_integer、binary_float、binary_double
对于数字类型,number是不错的选择,那么m, n代表什么呢?如果定义为number(6, 2)则代表整数位最大长度是4,小数位最大长度是2,你猜猜吧,m和n的含义。
其中,binary_integer在定义表时是很常用的。
由于是学习笔记么,说是教程,其实是在吸引大家的注意,呵呵,主要是想在方便大家查阅和入门者入门外,希望大家多多指教,多多提出意见,共同把这块知识学熟、学通、学透。
Quasar Wei’s Email:quasarbrave@
Quasar Wei’s QQ: 734089783
Quasar Wei’s Real Name: WeiZhaozhe of NEU
源码:
说明:源码都是由PL/SQL Developer 8开发,于Oracle10g测试
相关文档
最新文档