




已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章Oracle10gPL/SQL程序设计,7.1PL/SQL程序设计基础7.2流程控制语句7.3游标7.4异常处理7.5过程与函数7.6触发器,7.1PL/SQL程序设计基础,7.1.1PL/SQL程序结构,PL/SQL也是一种模块化结构的语言,它的大体结构如下:DECLARE-定义部分:变量、常量、游标、自定义数据类型等说明。BEGIN-执行部分:PL/SQL语句。EXCEPTION-异常处理部分,异常的处理请参考7.4节。END;,返回首页,7.1.2运算符,1算术运算符算术运算符用于执行数字型表达式的算术运算,PL/SQL支持的算术运算符包括:+:加。-:减。*:乘。/:除。MOD:取模,2比较运算符比较运算符用来比较两个表达式的值是否相同。PL/SQL支持的比较运算符包括:大于。=等于。=大于等于。=小于等于。!=不等于。like类似于。between在之间。in在之中。,3逻辑运算符逻辑运算符用于测试条件是否为真,它与比较运算符一样,根据测试结果返回布尔值TRUE、FALSE。逻辑运算符有以下几种:AND。OR。NOT。,4字符串连接符“|”可以实现字符串之间的连接操作。PL/SQL中,字符串之间的其他操作通过字符串函数实现。例7-1下列表达式用字符串连接符实现两字符串间的连接。SELECTabc|123FROMdual其计算结果为abc123。注意:dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录。,返回首页,5赋值运算符PL/SQL中的赋值运算符为等号(:=),它将表达式的值赋给一个变量。例如:DECLARExINT;BEGINx:=100+50;dbms_output.put_line(x);END;注意:在SQL*PLUS中使用dbms_output.put_line来输出变量的值,需要执行SETSERVEROUTPUTON命令打开环境变量serveroutput,返回本节,7.1.3变量与常,1变量声明PL/SQL在DECLARE部分中声明变量,语法格式为:变量名数据类型2变量赋值变量声明后,可以按下面语法为变量赋值:变量名:=表达式;,返回首页,7.1.4定义数据类型,定义数据类型的语法格式为:TYPE数据类型名IS数据类型Oracle允许用户定义3种数据类型:RECORD(记录)、TABLE(表)、VARRAY(变长数组),定义RECORD的语法为:TYPE数据类型名ISRECORD(成员变量定义);其他类型的定义请参考ORACLE的帮助文档.,7.2流程控制语句,流程控制语句用于控制PL/SQL语句、语句块、存储过程或函数的执行流程,7.2.1条件语句,1IFELSE语句语法格式为:IFTHENSQL语句语句块ELSESQL语句语句块ENDIF;,2IFELSIFELSE语句语法格式IFTHENSQL语句语句块ELSIFTHENSQL语句语句块ELSESQL语句语句块ENDIF;,3CASE语句CASEWHENTHENPL/SQL语句块1WHENTHENPL/SQL语句块2WHENTHENPL/SQL语句块NELSEPL/SQL语句块N+1,7.2.2循环语句,1基本循环LOOPPL/SQL语句语句块EXITWHENENDLOOP;,2WHILE循环WHILELOOPPL/SQL语句语句块ENDLOOP功能:当条件表达式为真时,重复执行其中的PL/SQL语句或语句块。,3FOR循环FORINREVERSE.LOOPPL/SQL语句语句块循环体ENDLOOP默认情况下,当使用FOR循环时,每次循环变量会自动加一,如果指定REVERSE选项,那么每次循环变量会自动减一。循环变量必须是NUMBER或INTEGER类型。,返回本节,7.2.3RETURN语句与NULL语句,1RETURN语句语法格式:RETURN表达式功能:终止子程序的执行,返回到调用者。在存储过程和触发器中RETURN不能带“表达式”,在函数中必须用带表达式的RETURN语句以返回函数结果给调用者。2NULL语句NULL语句即空语句,表示什么都不做,但起到一个占位作用。,7.3游标,1显式游标的定义游标定义的语法格式如下:CURSORISSELECT语句FORUPDATEOF列名列表NOWAITFORUPDATE用于在游标数据集上加共享锁,带FORUPDATE选项的游标可以使用游标更新或删除数据,2打开游标OPEN3从一个打开的游标中提取数据行FETCHINTO4关闭游标CLOSE,5显式游标属性显式游标属性用于返回显式游标的执行信息,当使用显式游标属性时,必须在显式游标属性之前带有显式游标名作为前缀。显式游标属性包括:%ISOPEN判断游标是否打开,如果游标已经打开,则返回TRUE,否则返回FALSE。%FOUND检查是否从结果集中提到了数据,如果提到了数据则返回TRUE,否则返回FALSE。%NOTFOUND该属性与%FOUND属性值相反。%ROWCOUNT返回当前行为止已经提取的实际行数。,6参数游标参数游标定义的语法格式:COUSOR游标名(参数名参数类型)ISSELECT语句;定义参数游标时,需指定参数名和参数类型(不要指定参数长度),参数游标可以用不同的参数值打开多个不同的结果集。,7.4异常处理,异常(EXCEPTION)是指PL/SQL程序在运行时出现的错误或警告,如除数为零或内存溢出等情况。如果没有异常处理机制,程序一旦出现错误就会终止执行。Oracle通过引入异常处理机制,可以捕获各种异常,根据异常情况进行相应的处理。,返回本节,PL/SQL异常处理语法如下:BEGIN正常处理代码EXCEPTIONWHEN异常1THEN对异常1的处理代码WHEN异常2对异常2的处理代码WHENOTHERSTHEN其他的处理代码END,7.4.2处理预定义异常,常用的预定义异常NO_DATA_FOUNDTOO_MANG_ROWSDUP_VAL_ON_INDEXVALUE_ERRORSTORAGE_ERRORZERO_DIVIDE,CASE_NOT_FOUNDCURSOR_ALREADY_OPENTIMEOUT_ON_RESOURCEINVALID,7.4.3处理非预定义异常,在PL/SQL程序中处理非预定义异常,可以使用OTHERS异常处理。或定义异常,并将定义的异常与Oracle的错误号关联.定义异常是在程序的说明部分,语法格式为:EXCEPTION将异常名与Oracle的错误号关联要使用PRAGMAEXCEPTION_INIT过程PRAGMAEXCEPTION_INIT(,);,7.4.4处理自定义异常,自定义异常是指由PL/SQL开发人员所定义的异常,自定义异常与Oracle错误没有任何关联。自定义异常必须是在代码中显式触发。显式触发异常的语法格式为:RAISE例7-11自定义异常应用,返回本节,7.4.5与异常有关的函数,当在PL/SQL块中出现Oracle错误时,通过使用异常函数可以取得错误号和相关的错误信息,其中SQLCODE用于获得错误号,SQLERRM用于取得与之对应的错误信息。使用异常函数raise_application_error可以在数据库的子程序(过程、函数、触发器)中自定义错误号与错误信息。例7-12捕获错误信息和错误号,7.5过程与函数,过程与函数是被命名的PL/SQL块,也称为子程序,它们存储在数据库中,可以在不同的应用中多次调用.7.5.1存储过程1存储过程的优点:(1)减少网络流量(2)增强代码的重用性和共享性(3)加快系统运行速度(4)加强安全性,2创建存储过程,创建存储过程的语法为:CREATEORREPLACEPROCEDURE(参数说明)IS|AS本地变量声明BEGINPL/SQL语句块EXCEPTION异常处理END过程名;,3执行存储过程,在SQL*PLUS中,可以用EXECUTE命令调用这个过程。其语法格式为:EXECUTE存储过程名(实参列表)在PL/SQL块中,可以直接用过程名调用,4删除存储过程,删除存储过程是指删除由用户创建的存储过程。格式:DROPPROCEDURE存储过程名。注意:删除一个不存在的存储过程,Oracle将会报错.,7.5.2函数,函数与过程基本类似,也是编译后存储在数据库中,可供用户重复调用,与过程不同是,函数必须有一个返回结果。,1创建函数,创建函数的语法为:CREATEORREPLACEFUNCTION(参数说明)RETURNIS|AS本地变量声明BEGINPL/SQL语句块EXCEPTION异常处理END函数名;,2函数调用,在SQL*PLUS中,函数调用语法如下:EXECUTE:全局变量名:=函数名(实参列表);在SQL或PL/SQL中,函数可以在任何可以出现表达式的位置调用.例,3删除函数,删除函数是指删除由用户创建的函数。语法格式为:DROPFUNCTION函数名。比如删除例7-12所创建的函数:DROPFUNCTIONgetreaderborrownum;,7.5.3包,包类似于面向对象编程中的类,用于逻辑组合相关PL/SQL类型、公共常量、变量、游标、存储过程、函数等.包由包头和包体两部份组成,包头是包的描述部份,也称为包规范。创建包时首先要创建包头,然后创建包体。,1、创建包规范,创建包规范的语法格式:CREATEORREPLACEPACKAGEIS|AS变量、常量、数据类型定义游标定义头部存储过程说明函数说明END,2、定义包体,在包头中说明的过程、函数、游标在包体中必须实现。此外,在包体中也可以定义包头中没有说明的私有组件,如过程、函数、游标、常量、变量等。定义包体的语法格式:CREATEORREPLACEPACKAGEBODYIS|AS游标、函数、过程的具体定义;END,3使用包,使用包的语法为:包名.变量名|包名.过程名|包名.函数名|包名.游标名,4删除包,删除包的语法格式为:DROPPACKAGEBODY。,7.6触发器,触发器是指存储在数据库中,并被隐含执行的存储过程。,1DML触发器基本概念,DML触发器包含以下几个组成部份:触发时间:触发时间有两面种,BEFORE和AFTER触发事件:触发事件有INSERT、UPDATE、DELETE触发子类型:触发子类型有两种,分别为行触发(ROW)和语句触发(STATEMENT)触发条件:指定义触发器时,用WHEN子句指定的一个条件表达式,只有条件表达式的值为真时,才会执行触发器代码触发操作:指包含SQL语句和其他执行代码的PL/SQL块,DML触发器触发顺序,在单行数据上执行DML触发器的执行顺序(1)执行表的BEFORE语句触发器(2)再执行BEFORE行触发器(3)执行DML操作(4)AFTER行触发器(5)最后执行AFTER语句触发器,与触发器有关的两个特殊对象,DML行触发器被触发时,Oracle会创建两个特殊的对象:OLD和NEW,分别对应被触发行中的旧值和新值NEW存放INSERT或UPDATE语句将要插入或更新的新行OLD存放DELETE或UPDATE语句的执行而导致要从被该触发器作用的表中删除的行值,DML触发器定义,创建DML触发器的语法如下:CREATEORREPLACETRIGGER触发时间事件1OR事件2OR事件3ONFOREACHROWWHENPL/SQL块;,762INSTEADOF触发器,INSTEADOF是基于视图的DML触发器,对于复杂视图,不允许直接执行INSERT、UPDATE、DELE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 八年级地理下册 8.2新疆维吾尔自治区说课稿 (新版)商务星球版
- 4.3 .2土壤与植物生长 说课稿 -2024-2025学年浙教版七年级下册科学
- 电化学基础说课稿-2025-2026学年中职专业课-无机化学-分析检验技术-生物与化工大类
- 管理选拔考试题目及答案
- 永久基本农田保护红线区域的农民生计转型路径
- 加大国际市场风险识别与管理力度
- 各省数学中考试题及答案
- 高中vb会考试题及答案
- 高管人员考试题及答案
- 附中实验物理考试题及答案
- 《分子生物学基础知识》课件
- GB/T 45147-2024道路车辆总质量大于3.5 t的车辆气制动系统试验使用滚筒制动试验台获取和使用参考值
- 食管纵隔瘘护理
- 建筑项目水泥采购合同
- 华为ICT大赛网络赛道考试题库(786题)
- 水果采购协议样本
- 中职英语(高教版2021基础模块1)Part01-Unit2-Transportation
- 哲学与人生 第二课 树立科学的世界观2.1
- 2024-2030年中国止痛药品市场供需形势及未来前景动态研究研究报告
- 风电110KV升压站土建工程施工方案
- 2018低压电力线高速载波通信互联互通技术规范第3部分:检验方法
评论
0/150
提交评论