Oracle数据库培训-PLSQL编程_第1页
Oracle数据库培训-PLSQL编程_第2页
Oracle数据库培训-PLSQL编程_第3页
Oracle数据库培训-PLSQL编程_第4页
Oracle数据库培训-PLSQL编程_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PL/SQL编程 本章学习目标 本章将讲述 PL/SQL基础语法,结构和组件、以及如何设计并执行一个 PL/SQL程序。 第二章 PL/SQL编程 本章内容安排 2.1 PL/SQL简介 2.2 PL/SQL语法 2.3 存储过程 2.4 触发器 2.5 游标 2.6 包 2.7 函数 2.1 PL/SQL简介 2.1.1 PL/SQL特点 2.1.2 开发及运行环境 1. PL/SQL的优点 ( 1) PL/SQL是一种高性能的基于事务处理的语言,能运行在任何 Oracle环境中,支持所有数据处理命令。通过使用 PL/SQL程序单元处理 SQL的数据定义和数据控制元素。 ( 2) PL/SQL支持所有 SQL数据类型和所有 SQL函数,同时支持所有Oracle对象类型。 ( 3) PL/SQL块可以被命名和存储在 Oracle服务器中,同时也能被其他的PL/SQL程序或 SQL命令调用,任何客户 /服务器工具都能访问 PL/SQL程序,具有很好的可重用性。 ( 2)可以使用 Oracle数据工具管理存储在服务器中的 PL/SQL程序的安全性。可以授权或撤销数据库其他用户访问 PL/SQL程序的能力。 ( 5) PL/SQL代码可以使用任何 ASCII文本编辑器编写,所以对任何Oracle能够运行的操作系统都是非常便利的。 2.1.1 PL/SQL特点 2. PL/SQL的缺点 对于 SQL, Oracle必须在同一时间处理每一条 SQL语句,在网络环境下这就意味作每一个独立的调用都必须被 oracle服务器处理,这就占用大量的服务器时间,同时导致网络拥挤。而 PL/SQL是以整个语句块发给服务器,这就降低了网络拥挤。 服务器端 PL/SQL 不需要显式的安装或许可。它是 Oracle9i 数据库的隐式部分,此处有相应的文档。 PL/SQL 编译器和解释器也嵌入到 Oracle Developer 中,为开发者在客户端和服务器端提供一致的、可利用的开发模型。 2.1.2 开发及运行环境 2.2.2 常量与变量 2.2.3 数据类型 2.2.4 运算符 2.2.1 PL/SQL块 2.2.5 流程控制 2.2.6 异常处理 2.2 PL/SQL语法 1块结构 2、块的命名和匿名 3、块的执行 2.2.1 PL/SQL块 1. 块结构 PL/SQL是一种块结构的语言 , 组成 PL/SQL程序的单元是逻辑块 ,一个 PL/SQL 程序包含了一个或多个逻辑块 , 每个块都可以划分为三个部分 。 ( 1) 块的三个部分 声明部分 ( Declaration section) 声明部分包含了变量和常量的数据类型和初始值 。 这个部分是由关键字DECLARE开始 , 如果不需要声明变量或常量 , 那么可以忽略这一部分 。 执行部分 ( Executable section) 执行部分是 PL/SQL块中的指令部分 , 由关键字 BEGIN开始 , 所有的可执行语句都放在这一部分 , 其他的 PL/SQL块也可以放在这一部分 。 异常处理部分 ( Exception section) 这一部分是可选的 , 在这一部分中处理异常或错误 , 对异常处理的详细讨论在后面进行 。 ( 2) PL/SQL块语法 PL/SQL块语法结构如下: DECLARE declaration statements BEGIN executable statements EXCEPTION exception statements END 例: declare in_id number(2);in_name varchar2(20); begin in_id:=1;in_name:=James; update test set t_name=in_name where t_id=in_id; end; / PL/SQL块中的每一条语句都必须以分号结束 , SQL语句可以多行 , 但分号表示该语句的结束 。 一行中可以有多条 SQL语句 , 他们之间以分号分隔 。每一个 PL/SQL块由 BEGIN或 DECLARE开始 , 以 END结束 。 注释由 -标示 。 2 块的命名和匿名 PL/SQL程序块可以是一个命名的程序块也可以是一个匿名程序块 ,匿名程序块可以用在服务器端也可以用在客户端 。 执行部分包含了所有的语句和表达式 , 执行部分以关键字 BEGIN开始 , 以关键字 EXCEPTION结束 , 如果 EXCEPTION不存在 , 那么将以关键字 END结束 。 分号分隔每一条语句 , 使用赋值操作符 :=或 SELECT INTO或 FETCH INTO给每个变量赋值 , 执行部分的错误将在异常处理部分解决 , 在执行部分中可以使用另一个 PL/SQL程序块 , 这种程序块被称为嵌套块 。 所有的 SQL数据操作语句都可以用于执行部分 , PL/SQL块不能在屏幕上显示 SELECT语句的输出 。 SELECT语句必须包括一个 INTO子串或者是游标的一部分 , 执行部分使用的变量和常量必须首先在声明部分声明 , 执行部分必须至少包括一条可执行语句 , NULL是一条合法的可执行语句 , 事物控制语句 COMMIT和 ROLLBACK可以在执行部分使用 ,数据定义语言 (Data Definition language)不能在执行部分中使用 , DDL语句与 EXECUTE IMMEDIATE一起使用或者是 DBMS_SQL调用 。 3 块的执行 SQL*PLUS中匿名的 PL/SQL块的执行是在 PL/SQL块后输入 /来执行 。 命名的程序与匿名程序的执行不同 , 执行命名的程序块必须使用 execute关键字 :。 如果在另一个命名程序块或匿名程序块中执行这个程序 , 那么就不需要 EXECUTE关键字 。 1变量 2、常量 3、有效字符集 2.2.2 常量与变量 1、 变量 ( 1) 声明变量 声明变量的语句格式如下: Variable_name CONSTANT databyte NOT NULL:=|DEFAULT expression 注意: 可以在声明变量的同时给变量强制性的加上 NOT NULL约束条件 ,此时变量在初始化时必须赋值 。 ( 2) 给变量赋值 给变量赋值有两种方式: 直接给变量赋值 通过 SQL SELECT INTO 或 FETCH INTO给变量赋值 2、 常量 常量与变量相似 , 但常量的值在程序内部不能改变 , 常量的值在定义时赋予 , 声明方式与变量相似 , 但必须包括关键字 CONSTANT。 常量和变量都可被定义为 SQL和用户定义的数据类型 。 为了减少这部分程序的修改 , 编程时使用 %TYPE、%ROWTYPE方式声明变量 , 使变量声明的类型与表中的保持同步 , 随表的变化而变化 , 这样的程序在一定程度上具有更强的通用性 。 %TYPE对应列 , %ROWTYPE对应行 。 3、 有效字符集 ( 1) 所有的大写和小写英文字母; ( 2) 数字 0-9; ( 3) 符号: 0一 * ! 一; :. , “ “ ? PL/SQL标识符的最大长度是 30个字符 , 并且不区分字母的大小写 。 但是适当地使用大小写 , 可以提高程序的可读性 。 2.2.3 数据类型 例如:定义如下若干类型变量,常量。 DECLARE ORDER_NO NUMBER(3); CUST_NAME VARCHAR2(20); ORDER_DATE DATE; EMP_NO INTEGER:=25; PI CONSTANT NUMBER:=3.1216; BEGIN NULL; END; 2.2.4 运算符 与其他程序设计语言相同, PL/SQL有一系列操作符。主要有: 算术操作符 + - * / * | 关系操作符 = ,方式 l数据类型 1, 参数 2, 方式 2数据类型 2, ) IS|AS is或 as完全等价 BEGIN PL/SQL过程体 END过程名 2.3.1 存储过程的创建 过程参数有以下三种类型: ( 1) in参数类型:表示输入给过程的参数。 ( 2) out参数类型:表示参数在过程中将被赋值,可以传给过程体的外部。 ( 3) in out参数类型:表示该类参数既可以向过程体传值,也可以在过程体中赋值,以便向过程体外传值。 存储过程可以直接用 EXECUT命令调用或 PL/SQL程序块内部调用。 用 EXECUT命令调用存储过程的格式如下: SQLexecute proc_name(par1,par2); 2.3.2 存储过程的调用 存储过程也可以被另外的 PL/SQL块调用 , 调用的语句是: declare par1,par2; begin proc_name(par1,par2); end; 在调用前要声明变量 par1, par2 当某个存储过程不再需要时,应将其从内存中删除,以释放它占用的内存资源。释放过程的语句格式如下: SQLdrop procedure proc_name; proc_name为过程名。 2.3.3 存储过程的释放 编写存储过程,显示所指定雇员名所在的部门名和位置。 CREATE OR REPLACE PROCEDURE DeptMesg(pename emp.ename%TYPE, pdname OUT dept.dname%TYPE,ploc OUT dept.loc%TYPE) AS BEGIN SELECT dname,loc INTO pdname,ploc FROM emp,dept WHERE emp.deptno=dept.deptno AND emp.ename=pename; END; / VARIABLE vdname VARCHAR2(12); VARIABLE vloc VARCHAR2(13); EXECUTE DeptMesg(SMITH,:vdname, :vloc); PRINT vdname vloc; 2.3.4 实例 2.2.2 触发器的类型 2.2.3 触发器的创建 2.2.4 触发器的修改和删除 2.2.1 触发器的设计规则 2.2 触发器 2.2.5 实例 ( 1)作用范围清晰 ( 2)不要让触发器去完成 Oracle后台已经能够完成的功能 ( 3)限制触发器代码的行数 ( 2)不要创建递归的触发器 ( 5)触发器仅在被触发语句触发时进行集中的,全局的操作,同用户和数据库应用无关。 2.2.1 触发器的设计规则 可以创建被如下语句所触发的触发器: ( 1) DML语句( DELETE, INSERT, UPDATE); ( 2) DDL语句( CREATE, ALTER, DROP); ( 3)数据库操作( SERVERERROR, LOGON, LOGOFF,STARTUP, SHUTDOWN)。 2.2.2 触发器的类型 1使用 CREATE TRIGGER语句创建触发器 使用 CREATE TRIGGER语句创建触发器的语句格式如下: CREATEOR REPLACE TRIGGER name BEFORE|AFTER event OR . ON table FOREACH ROW|STATEMENT WHEN(condition) plsql block|call procedures_statement 2.2.3 触发器的创建 2 注意事项 ( 1) 触发器可以声明为在对记录进行操作之前 , 在之前 (检查约束之前和 INSERT, UPDATE 或 DELETE 执行前 )或之后 (在检查约束之后和完成 INSERT, UPDATE 或 DELETE 操作 )触发 .。 ( 2) 一个 FOR EACH ROW 执行指定操作的触发器为操作修改的每一行都调用一次 。 ( 3) SELECT 并不更改任何行 , 因此不能创建 SELECT 触发器 .这种场合下规则和视图更适合 。 ( 2) 触发器和某一指定的表格有关 , 当该表格被删除时 , 任何与该表有关的触发器同样会被删除 。 ( 5) 在一个表上的每一个动作只能有一个触发器与之关联 。 ( 6) 在一个单独的表上 , 最多只能创建三个触发器与之关联 , 一个 INSERT触发器 , 一个 DELETE触发器和一个 UPDATE触发器 。 删除触发器的语句格式为: DROP TRIGGER name ON table; 一个触发器由三部分组成 :触发事件或语句、触发限制和触发器动作。触发事件或语句是指引起激发触发器的 SQL语句,可为对一指定表的 INSERT、 UNPDATE或 DELETE语句。触发限制是指定一个布尔表达式,当触发器激发时该布尔表达式是必须为真。触发器作为过程,是 PL/SQL块,当触发语句发出、触发限制计算为真时该过程被执行。 2.2.4 触发器的修改和删除 编写一个数据库触发器,当任何时候某个部门从 dept表中删除时,该触发器将从 emp表中删除该部门的所有雇员。 CREATE OR REPLACE TRIGGER del_emp_deptno BEFORE DELETE ON dept FOR EACH ROW BEGIN DELETE FROM emp WHERE deptno=:OLD.deptno; END; 2.2.5 实例 2.5.2 隐式游标 2.5.3 实例 2.5.1 显式游标 2.5 游标 Oracle游标是一种用于轻松的处理多行数据的机制 ,没有游标 , Oracle开发人员必须单独地 、 显式地取回并管理游标查询选择的每一条记录 。 游标的另一项功能是 , 它包含一个跟踪当前访问的记录的指针 , 这使程序能够一次处理多条记录 。 1声明游标 2、打开游标 3、从游标中取回数据 2.5.1 显式游标 2、关闭游标 1.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论