oracle 第15章 PLSQL程序设计.ppt





《oracle 第15章 PLSQL程序设计.ppt》由会员分享,可在线阅读,更多相关《oracle 第15章 PLSQL程序设计.ppt(192页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Oracle 数据库基础教程2009第第15章章 PL/SQL程序设计程序设计1Oracle 数据库基础教程2007本章内容本章内容pPL/SQL概述pPL/SQL基础p控制结构p游标p异常处理p存储子程序p包p触发器2Oracle 数据库基础教程2007本章要求本章要求p掌握PL/SQL程序设计基础知识p掌握存储过程、函数、包、触发器的应用3Oracle 数据库基础教程200715.1 PL/SQL概述概述pPL/SQL特点pPL/SQL功能特性pPL/SQL执行过程与开发工具4Oracle 数据库基础教程200715.1.1PL/SQL特点特点p与SQL语言紧密集成。p减小网络流量,提高应
2、用程序的运行性能。p模块化的程序设计功能,提高了系统可靠性。p服务器端程序设计,可移植性好。5Oracle 数据库基础教程200715.1.2PL/SQL功能特性功能特性p语句块结构p异常处理p变量和类型p条件语句p循环结构p游标p过程、函数和触发器p包p集合p动态SQLp对象特性6Oracle 数据库基础教程200715.1.3PL/SQL执行过程与开发工具执行过程与开发工具PL/SQL块SQL语句客户端应用程序PL/SQL引擎数据库服务器过程化语句执行器SQL执行器块中SQL语句pPL/SQL执行过程 7Oracle 数据库基础教程2007pPL/SQL开发工具nSQL*PLUSnProc
3、edureBuildernOracleForm、OracleReportsnPL/SQLDeveloper8Oracle 数据库基础教程200715.2 PL/SQL基础基础pPL/SQL程序结构 p词法单元 p数据类型p变量与常量p编译指示pPL/SQL中的SQL语句9Oracle 数据库基础教程2007PL/SQL程序结构程序结构pPL/SQL块的组成pPL/SQL块分类 10Oracle 数据库基础教程2007pPL/SQL块的组成nPL/SQL语言以块为单位,块中可以嵌套子块。语言以块为单位,块中可以嵌套子块。n一个基本的一个基本的PL/SQL块由块由3部分组成:部分组成:p声明(DE
4、CLARE),p可执行部分(BEGIN),p异常处理部分EXCEPTION)。n11Oracle 数据库基础教程2007p声明部分n声明部分以关键字DECLARE开始,BEGIN结束。主要用于声明变量、常量、数据类型、游标、异常处理名称以及本地(局部)子程序定义等。p可执行部分n执行部分是PL/SQL块的功能实现部分,以关键字BEGIN开始,EXCEPTION或END结束(如果PL/SQL块中没有异常处理部分,则以END结束)。该部分通过变量赋值、流程控制、数据查询、数据操纵、数据定义、事务控制、游标处理等实现块的功能。p异常处理部分n异常处理部分以关键字异常处理部分以关键字EXCEPTION
5、开始,开始,END结束。该部分用结束。该部分用于处理该块执行过程中产生的异常。于处理该块执行过程中产生的异常。12Oracle 数据库基础教程2007p注意:n执行部分是必需的,而声明部分和异常部分是执行部分是必需的,而声明部分和异常部分是可选的;可选的;n可以在一个块的执行部分或异常处理部分嵌套可以在一个块的执行部分或异常处理部分嵌套其他的其他的PL/SQL块;块;n所有的所有的PL/SQL块都是以块都是以“END;”结束结束13Oracle 数据库基础教程2007pPL/SQL块分类n匿名块匿名块n命名块命名块p函数p存储过程p包p触发器14Oracle 数据库基础教程200715.5.2
6、15.5.2词法单元词法单元p字符集p标识符p分隔符p常量值p注释15Oracle 数据库基础教程2007p字符集n大小写字母:大小写字母:AZAZ,azazn数字:数字:0909n空白:制表符、空格和回车空白:制表符、空格和回车n数字符号:数字符号:+-*/+-*/=n标点符号:标点符号:!#$%&*()()_|?;:,.“16Oracle 数据库基础教程2007p标识符n标标识识符符以以字字母母开开头头,后后边边可可以以跟跟字字母母、数数字字、货币符号、下划线和货币符号、下划线和”#”#”n标标识识符符的的最最大大长长度度为为3030字字符符,并并且且所所有有字字符符都都是有效的。是有效的
7、。p合法:X v_studentID TempVarp非法:X+y _temp 17Oracle 数据库基础教程2007p+p-p*p/p=p:=pp=pp!=p=p=p(p)p/*p*/pp%p;p:p.pp“p.pp|p=p*p-p分隔符分隔符18Oracle 数据库基础教程2007p常量值n字符型常量字符型常量n数字型常量数字型常量n布尔型常量:布尔型常量:TURE、FALSE、NULLn日期型常量日期型常量19Oracle 数据库基础教程200715.2.3数据类型数据类型p数字类型p字符类型p日期/区间类型p行标识类型p布尔类型p原始类型pLOB类型p记录类型p集合类型20Oracl
8、e 数据库基础教程2007PL/SQL中常用的基本数据类型分类数据类型数字类型NUMBER、BINARY_NUMBER PLS_NUMBER字符类型VARCHAR2、CHAR、LONG、NCHAR、NVARCHAR日期/区间类型 DATE、TIMESTAMP、INTERVAL行标识类型ROWID、UROWID布尔类型BOOLEAN(TRUE、FALSE、NULL)原始类型RAW、LONG RAWLOB类型CLOB、BLOB、NCLOB、BFILE记录类型RECORD集合类型TABLE、VARRAY21Oracle 数据库基础教程2007p记录类型的定义nTYPErecord_typeISREC
9、ORD(nfield1datatype1NOTNULLDEFAULT|:=expr1,nfield2datatype2NOTNULLDEFAULT|:=expr2,nnfieldndatatypenNOTNULLDEFAULT|:=exprn);22Oracle 数据库基础教程200715.2.415.2.4变量与常量变量与常量p变量与常量的定义p变量的作用域23Oracle 数据库基础教程2007变量声明变量与常量的定义变量与常量的定义p变量定义的一般格式:n CONSTANT NOT NULL DEFAULT|:=;p说明n每行只能定义一个标识符。n如果加上关键字CONSTANT,则表示所
10、定义的标识符为一个常量,必须为它赋初值。n如果定义的标识符不能为空,则必须加上关键字NOT NULL,并赋初值。n为标识符赋值时,使用赋值符号:=,默认值为空。24Oracle 数据库基础教程2007pDECLAREp v1 NUMBER(4);p v2 NUMBER(4)NOT NULL:=10;p v3 CONSTANT NUMBER(4)DEFAULT 100;pBEGINp IF v1 IS NULL THEN p DBMS_OUTPUT.PUT_LINE(V1 IS NULL!);p END IF;p DBMS_OUTPUT.PUT_LINE(v2|v3);pEND;25Oracle
11、 数据库基础教程2007p声明一个变量,使它的类型与某个变量或声明一个变量,使它的类型与某个变量或数据库基本表中某个列的数据类型一致,数据库基本表中某个列的数据类型一致,可以使用可以使用%TYPE。p示例示例nv_empno1 emp.empno%TYPE;nv_empno2 v_empno1%TYPE;26Oracle 数据库基础教程2007变量的作用域变量的作用域p变量的作用域是指变量的有效作用范围,从变量声明开始,直到块结束。p如果PL/SQL块相互嵌套,则在内部块中声明的变量是局部的,只能在内部块中引用,而在外部块中声明的变量是全局的,既可以在外部块中引用,也可以在内部块中引用。p如果
12、内部块与外部块中定义了同名变量,则在内部块中引用外部块的全局变量时需要使用外部块名进行标识。27Oracle 数据库基础教程2007ppDECLAREp v_ename CHAR(15);p v_outer NUMBER(5);pBEGINp v_outer:=10;p DECLAREp v_ename CHAR(20);p v_inner DATE;p BEGINp v_inner:=sysdate;p v_ename:=INNER V_ENAME;p OUTER.v_ename:=OUTER V_ENAME;p END;p DBMS_OUTPUT.PUT_LINE(v_ename);pEN
13、D;28Oracle 数据库基础教程200715.2.5编译指示编译指示p编译指示是对编译程序发出的特殊指令,也称伪指令。n关键字:关键字:PRAGMApPL/SQL提供以下四种编译指示:nEXCEPTION_INITp告诉编译程序将一个特定的错误号与程序中所声明的异常标识符关联起来。nRESTRICT_REFERENCESp告诉编译程序打包程序的纯度,即对函数中可以使用的SQL语句和包变量进行限制。29Oracle 数据库基础教程2007nSERIALLY_REUSEABLEp告诉PL/SQL运行时引擎,在数据引用之间不要保持包级数据。nAUTONOMOUS_TRANSACTIONp告诉编译
14、程序,该程序块为自治事务,即该事务的提交和回滚是独立进行的。30Oracle 数据库基础教程200715.2.6PL/SQL中中SQL语句语句p可以在PL/SQL中执行的SQL语句包括nSELECTnDML(UPDATE、DELETE、INSERT)n事务控制语句(事务控制语句(COMMIT、ROLLBACK、SAVEPOINT)p注意DDL语句不可以直接使用31Oracle 数据库基础教程2007pSELECTINTOnSELECTINTO语句只能查询一个记录的信语句只能查询一个记录的信息,如果没有查询到任何数据,则会产生息,如果没有查询到任何数据,则会产生NO_DATA_FOUND异常;如
15、果查询到多个异常;如果查询到多个记录,则会产生记录,则会产生TOO_MANY_ROW异常。异常。nINTO句子后的变量用于接收查询的结果,变句子后的变量用于接收查询的结果,变量的个数、顺序应该与查询的目标数据相匹配,量的个数、顺序应该与查询的目标数据相匹配,也可以是记录类型的变量。也可以是记录类型的变量。DML语句语句32Oracle 数据库基础教程2007pDECLAREpv_emp emp%ROWTYPE;p v_ename emp.ename%type;p v_sal emp.sal%type;pBEGINpSELECT*INTO v_emp FROM emp WHERE ename=S
16、MITH;p DBMS_OUTPUT.PUT_LINE(v_emp.empno|v_emp.sal);p select ename,sal INTO v_ename,v_sal FROM emp WHERE empno=7900;p DBMS_OUTPUT.PUT_LINE(v_ename|v_sal);pEND;33Oracle 数据库基础教程2007pDML语句nPL/SQL中中DML语句对标准语句对标准SQL语句中的语句中的DML语句语句进行了扩展,允许使用变量。进行了扩展,允许使用变量。p 示例nDECLAREnv_empnoemp.empno%TYPE:=7500;nBEGINnIN
17、SERTINTOemp(empno,ename,sal,deptno)VALUES(v_empno,JOAN,2300,20);nUPDATEempSETsal=sal+100WHEREempno=v_empno;nDELETEFROMempWHEREempno=v_empno;nEND;34Oracle 数据库基础教程2007pWHEREn标识符的区分标识符的区分p系统首先查看WHERE子句中的标识符是否与表中的列名相同,如果相同,则该标识符被解释为列名;如果没有同名列,系统检查该标识符是不是PL/SQL语句块的变量。n字符串比较字符串比较p填充比较:通过在短字符串后添加空格,使两个字符串达
18、到相同长度,然后根据每个字符的ASCII码进行比较。p非填充比较:根据每个字符的ASCII码进行比较,最先结束的字符串为小。nPL/SQL中规定,对定长的字符串(中规定,对定长的字符串(CHAR类型的字类型的字符串和字符串常量)采用填充比较;如果比较的字符符串和字符串常量)采用填充比较;如果比较的字符串中有一个是变长字符串(串中有一个是变长字符串(VARCHAR2类型的字符类型的字符串),则采用非填充比较。串),则采用非填充比较。35Oracle 数据库基础教程2007pRETURNINGn如果要查询当前如果要查询当前DML语句操作的记录的信息,语句操作的记录的信息,可以在可以在DML语句末尾
19、使用语句末尾使用RETURNING语语句返回该记录的信息。句返回该记录的信息。nRETURNING语句的基本语法语句的基本语法:pRETURNING select_list_item INTO variable_list|record_variable;36Oracle 数据库基础教程2007nDECLAREn v_sal emp.sal%TYPE;nBEGINn UPDATE emp SET sal=sal+100 WHERE empno=7844 RETURNING sal INTO v_sal;n DBMS_OUTPUT.PUT_LINE(v_sal);nEND;37Oracle 数据库
20、基础教程200715.3 15.3 控制结构控制结构 p选择结构p循环结构p跳转结构38Oracle 数据库基础教程200715.3.1选择结构选择结构pIF语句语句nIF condition1 THEN statements1;nELSIF condition2 THEN statements2;nnELSE else_statements;nEND IF;p注意注意n条件是一个布尔型变量或表达式,取值只能是TRUE,FALSE,NULL。39Oracle 数据库基础教程2007p例如,输入一个员工号,修改该员工的工资,如果该员工为10号部门,工资增加100;若为20号部门,工资增加150;
21、若为30号部门,工资增加200;否则增加300。40Oracle 数据库基础教程2007pDECLAREpv_deptno emp.deptno%type;p v_increment NUMBER(4);p v_empno emp.empno%type;pBEGINp v_empno:=&x;p SELECT deptno INTO v_deptno FROM emp WHERE empno=v_empno;p IF v_deptno=10 THEN v_increment:=100;p ELSIF v_deptno=20 THEN v_increment:=150;p ELSIF v_dep
22、tno=30 THEN v_increment:=200;p ELSE v_increment:=300;p END IF;p UPDATE emp SET sal=sal+v_increment WHERE empno=v_empno;pEND;41Oracle 数据库基础教程2007搜索式搜索式CASE语句语句p基本语法基本语法nCASEnWHENcondition1THENstatements1;nWHENcondition2THENstatements2;nnWHENconditionnTHENstatementsn;nELSEelse_statements;nENDCASE;42Or
23、acle 数据库基础教程2007等值比较的等值比较的CASE语句语句p基本语法基本语法nCASEtest_valuenWHENvalue1THENstatements1;nWHENvalue2THENstatements2;nnWHENvaluenTHENstatementsn;nELSEelse_statements;nENDCASE;43Oracle 数据库基础教程2007pDECLAREp v_deptno emp.deptno%type;p v_increment NUMBER(4);p v_empno emp.empno%type;pBEGINp v_empno:=&x;p SELE
24、CT deptno INTO v_deptno FROM emp WHERE empno=v_empno;p CASE v_deptno p WHEN 10 THEN v_increment:=100;p WHEN 20 THEN v_increment:=150;p WHEN 30 THEN v_increment:=200;p ELSE v_increment:=300;pEND CASE;pUPDATE emp SET sal=sal+v_increment WHERE empno=v_empno;pEND;44Oracle 数据库基础教程2007p根据输入的员工号,修改该员工工资。如果
25、该员工工资低于1000,则工资增加200;如果工资在1000-2000之间,则增加150;如果工资在2000-3000之间,则增加100;否则增加50。45Oracle 数据库基础教程2007pDECLAREpv_sal emp.sal%type;pv_increment NUMBER(4);pv_empno emp.empno%type;pBEGINpv_empno:=&x;pSELECT sal INTO v_sal FROM emp WHERE empno=v_empno;pCASE p WHEN v_sal1000 THEN v_increment:=200;p WHEN v_sal2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 第15章 PLSQL程序设计 15 PLSQL 程序设计

限制150内