PLSQL程序设计培训教程.ppt
《PLSQL程序设计培训教程.ppt》由会员分享,可在线阅读,更多相关《PLSQL程序设计培训教程.ppt(104页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、PLSQL程序设计培训教程1-2SQL语句每次只能执行一条,不适应开发功能完备的语句每次只能执行一条,不适应开发功能完备的数据库应用程序,数据库应用程序,Oracle提供了自己的过程化语言提供了自己的过程化语言PL/SQL。本章主要内容包括:本章主要内容包括:PL/SQL基础基础 PL/SQL控制结构控制结构 PL/SQL记录和表记录和表 游标游标 过程与函数过程与函数 触发器触发器 异常处理异常处理1-31-41-51-65.1.3 表达式表达式主要指赋值表达式,语法如下:主要指赋值表达式,语法如下:变量:变量:=表达式,例如:表达式,例如:Date_of_today:=sysdate;As
2、tring:=farewell|to arms;Area:=pi*radius*2;表达式中的常用符号表达式中的常用符号数学运算符数学运算符:+、-、*、/、*布尔运算符布尔运算符:=、=其他符号其他符号:.、|、&、“、”1-75.1.4 PL/SQL程序块结构程序块结构可选的块声明、块体部分和可选的异常处理部分可选的块声明、块体部分和可选的异常处理部分:DECLARE-块声明部分块声明部分BEGIN-块体的可执行部分块体的可执行部分EXCEPTION-异常处理部分异常处理部分END;1-8一个一个PL/SQL块的简单例子块的简单例子SET SERVEROUTPUT ONDECLARE Pi
3、 CONSTANT REAL:=3.1415926;Circumference REAL;Area REAL;radius REAL:=&Radius;BEGIN Circumference:=Pi*radius*2.0;Area:=Pi*radius*2;DBMS_OUTPUT.enable;1-9DBMS_OUTPUT.put_line(Radius=|TO_CHAR(radius)|,Circumference=|TO_CHAR(Circumference)|,Area=|TO_CHAR(Area);END;1-10图图5.2显示了显示了PL/SQL引擎在引擎在Oracle服务器中的位置
4、服务器中的位置Oracle服务器服务器PL/SQL引擎引擎PL/SQL块过程化语句执行器SQL语句执行器图图5.21-11不论使用哪种工具,例如不论使用哪种工具,例如SQL*Plus或或SQL*Plus WorkSheet,该工具必须向该工具必须向Oracle服务器提交服务器提交PL/SQL源代码,源代码,PL/SQL引擎扫描、分析并编译代引擎扫描、分析并编译代码,然后预备执行编译后的代码。在执行期间,将码,然后预备执行编译后的代码。在执行期间,将所有的所有的SQL语句传递给语句传递给SQL语句执行器组件执行。语句执行器组件执行。SQL语句执行器执行语句执行器执行SQL或或DML语句。语句。P
5、L/SQL引引擎可以使用由查询提取的数据集进行更进一步的处擎可以使用由查询提取的数据集进行更进一步的处理。理。使用使用PL/SQL块后不必每执行一条块后不必每执行一条SQL语句都要经语句都要经过一次网络,因而相对于逐条发送一组过一次网络,因而相对于逐条发送一组SQL语句,语句,大大降低了网络传输量。大大降低了网络传输量。1-12另外,在另外,在PL/SQL块中,可以把块中,可以把SQL/DML语句当作语句当作一个事务对待。如果整个事务成功,那么对数据库一个事务对待。如果整个事务成功,那么对数据库的全部改动会被提交。如果事务的任何部分失败,的全部改动会被提交。如果事务的任何部分失败,整个事务会被
6、回滚。因为整个事务会被回滚。因为PL/SQL块中可以包含复块中可以包含复杂的逻辑,所以在服务器上执行,于是客户程序的杂的逻辑,所以在服务器上执行,于是客户程序的大小和复杂程度也降低了。大小和复杂程度也降低了。1-13PL/SQL块能执行复杂的逻辑和错误处理。一个客块能执行复杂的逻辑和错误处理。一个客户应用中可以嵌入一个简单的匿名或未命名的块户应用中可以嵌入一个简单的匿名或未命名的块(没有使用名字标记的(没有使用名字标记的PL/SQL代码块)并激活这代码块)并激活这些些PL/SQL块。这种能力通常称为远程过程调用块。这种能力通常称为远程过程调用(RPC)。)。PL/SQL块还可以调用其他块还可以
7、调用其他PL/SQL块。块。因为这些因为这些PL/SQL块已经被编译并被开发者很好地块已经被编译并被开发者很好地调试过,所以它们提供了显著的性能改进。并且通调试过,所以它们提供了显著的性能改进。并且通过为其他应用或模块提供可重复使用的块,减少了过为其他应用或模块提供可重复使用的块,减少了应用开发。应用开发。1-14当编译任意当编译任意PL/SQL程序时,不管是命名块还是未程序时,不管是命名块还是未命名块的代码,源代码和对象代码都被告诉缓存在命名块的代码,源代码和对象代码都被告诉缓存在共享共享SQL区中。分配给一个区中。分配给一个PL/SQL块的空间叫做块的空间叫做一个游标。服务器使用最近最少使
8、用算法,在共享一个游标。服务器使用最近最少使用算法,在共享SQL区保存缓存的程序直到它过期失效。在区保存缓存的程序直到它过期失效。在PL/SQL块中的任何块中的任何SQL语句都被给予各自的共享语句都被给予各自的共享SQL区。当一个命名子程序被编译时,它的源代码区。当一个命名子程序被编译时,它的源代码还被保存到数据字典中。包含在一个子程序中的代还被保存到数据字典中。包含在一个子程序中的代码是可重入的,也就是说,它在所有连接的用户间码是可重入的,也就是说,它在所有连接的用户间是共享的。是共享的。1-15当提交一个未命名的当提交一个未命名的PL/SQL块给服务器执行时,块给服务器执行时,服务器通过比
9、较源代码文本,决定在高速缓存中是服务器通过比较源代码文本,决定在高速缓存中是否有该程序块。如果代码文本字符之间(包括大小否有该程序块。如果代码文本字符之间(包括大小写)完全相同,则能够简单执行缓存的分析代码。写)完全相同,则能够简单执行缓存的分析代码。否则,必须首先分析新的语句。通过共享可执行代否则,必须首先分析新的语句。通过共享可执行代码,一个基于服务器的应用能够真正地实现内存节码,一个基于服务器的应用能够真正地实现内存节省,这在拥有数百个连接用户时尤其重要。省,这在拥有数百个连接用户时尤其重要。1-165.2 PL/SQL控制结构控制结构控制结构是所有程序设计语言的核心。控制结构是所有程序
10、设计语言的核心。PL/SQL程序程序可以使用顺序结构、选择结构、可以使用顺序结构、选择结构、NULL结构和循环结结构和循环结构来控制程序流。构来控制程序流。5.2.1 顺序结构顺序结构5.2.2 选择结构选择结构:1.If-then(允许嵌套允许嵌套)If var1var2 then DBMS_OUTPUT.put_line(var1 is larger than var2);end if;1-17在在PL/SQL中实现中实现if逻辑有两条规则:逻辑有两条规则:规则规则1 每个每个if语句都有自己的语句都有自己的then,以以if开始的语开始的语句行后面不跟语句结束符(句行后面不跟语句结束符(
11、;)。)。规则规则2 每个每个if语句块以相应的语句块以相应的end if结束。结束。2 if-then-else(也可以嵌套)也可以嵌套)If var1var2 then DBMS_OUTPUT.put_line(var1 is larger than var2);elseDBMS_OUTPUT.put_line(var1 is not larger than var2);end if;1-18规则规则3每个每个if语句有且只有一个语句有且只有一个else。规则规则4Else语句行后面不跟语句结束符。语句行后面不跟语句结束符。3 if-then-elsif这种结构用于替代嵌套这种结构用于替代
12、嵌套if-then-else结构。例子如结构。例子如下页所示。下页所示。1-19If var1var2 thenDBMS_OUTPUT.put_line(var1 is larger than var2);elsif var1=var2 thenDBMS_OUTPUT.put_line(var1 is equal to var2);elseDBMS_OUTPUT.put_line(var1 is smaller than var2);End if;规则规则5elsif无匹配的无匹配的end if。1-205.2.3 NULL结构结构空操作语句。空操作语句。If mark60 thennull;
13、else insert into student_course values();end if;1-215.2.4 循环结构循环结构1 LOOP-EXIT-END循环,由循环,由3部分组成,其语法部分组成,其语法如下:如下:loop 执行语句执行语句1;执行语句执行语句2;end loop一般这种循环结构的终止条件通过在执行语句中加一般这种循环结构的终止条件通过在执行语句中加入入EXIT或或EXIT WHEN来实现。例如下页的例子来实现。例如下页的例子1-22 SET SERVEROUTPUT ONDECLARE Ctr INTEGER:=0;BEGIN DBMS_OUTPUT.enable;
14、loop DBMS_OUTPUT.put(Ctr|);Ctr:=Ctr+1;EXIT WHEN Ctr=10;end loop;DBMS_OUTPUT.put_line(Loop Exited);END;1-232 WHILE-LOOP-END循环循环语法如下:语法如下:while 布尔表达式布尔表达式 loop 执行语句执行语句1;执行语句执行语句2;end loop;1-24一个一个WHILE循环的例子循环的例子 SET SERVEROUTPUT ONDECLARE Ctr INTEGER:=0;BEGIN while Ctr10 loop DBMS_OUTPUT.put(Ctr|);Ct
15、r:=Ctr+1;end loop;DBMS_OUTPUT.put_line(Loop Exited);END;1-253 FOR-IN-LOOP-END循环循环语法格式为:语法格式为:for 计数循环变量计数循环变量 in reverse 起始值起始值.终止值终止值 loop 执行语句执行语句1;执行语句执行语句2;end loop;1-26一个一个FOR循环结构的例子:循环结构的例子:SET SERVEROUTPUT ONBEGIN DBMS_OUTPUT.enable;for ctr in 0.9 loop DBMS_OUTPUT.put(Ctr|);end loop;DBMS_OUTP
16、UT.put_line(Loop Exited);END;1-275.3 PL/SQL记录和表记录和表用户自定义类型就是记录类型,用户自定义类型就是记录类型,PL/SQL记录是用户自记录是用户自定义类型,定义类型,PL/SQL表是由用户定义类型来说明的表,表是由用户定义类型来说明的表,本节介绍如何利用本节介绍如何利用%TYPE属性和属性和%ROWTYPE属性、属性、怎样声明和使用基本的记录类型和怎样声明和使用基本的记录类型和PL/SQL表。表。%TYPE和和%ROWTYPE属性的区别在于:前者用于基属性的区别在于:前者用于基本数据类型,而后者则用于记录类型和表结构。本数据类型,而后者则用于记录
17、类型和表结构。5.3.1 使用使用%TYPE%TYPE属性用于声明变量、常量、记录中的字段以及属性用于声明变量、常量、记录中的字段以及数据库列,表属性或其它程序结构相匹配的记录变量数据库列,表属性或其它程序结构相匹配的记录变量1-28使用使用%TYPE的一个例子:的一个例子:DECLAREStudent_No INTEGER;Course_No Stduent_No%TYPE;可以看出,使用可以看出,使用%TYPE可以获取它修饰的变量的数可以获取它修饰的变量的数据类型从而作为别的变量的数据类型。据类型从而作为别的变量的数据类型。1-295.3.2 记录类型记录类型声明记录类型的一般语句:声明记
18、录类型的一般语句:TYPE 记录类型记录类型 IS RECORD(字段字段1 数据类型数据类型 NOT NULL DEFAULT :=表表达式达式),字段,字段2)1-30一个声明记录的例子一个声明记录的例子SET SERVEROUTPUT ONDECLARE TYPE StudentRecord IS RECORD(StudentNo INTERGER,Name VARCHAR2(10),Gender CHAR(1),HomeTown VARCHAR2(20),Study VARCHAR2(10),Activity Study%TYPE );Student1 StudentRecord;1-
19、315.3.3 使用使用%ROWTYPE%ROWTYPE属性声明用于记录类型和表结构。属性声明用于记录类型和表结构。5.3.4 表表PL/SQL表是一个由用户定义类型来说明的表。其语法表是一个由用户定义类型来说明的表。其语法格式如下:格式如下:TYPE PL/SQL 表名表名 IS TABLE OF 数据类型,例如数据类型,例如DECLARETYPE StudentName IS TABLE OF StudentInfo.Name%TYPE;1-325.4 游标游标PL/SQL用游标来管理用游标来管理SQL的的SELECT语句。它是为语句。它是为处理这些语句而分配的一个具有结构的内存区。游标处
20、理这些语句而分配的一个具有结构的内存区。游标定义类似于其他定义类似于其他PL/SQL变量,并且必须遵守同样的命变量,并且必须遵守同样的命名规则。名规则。1-335.4.1 游标基本操作游标基本操作游标是一个对象,能够提供行级的游标是一个对象,能够提供行级的SQL语句控制。语句控制。游标声明不同于变量,而是用于实现游标的一个内游标声明不同于变量,而是用于实现游标的一个内存区域的句柄。游标声明仅仅定义了将提交给存区域的句柄。游标声明仅仅定义了将提交给SQL语句执行器哪些查询,在可执行代码中的程序控制语句执行器哪些查询,在可执行代码中的程序控制下进行查询的管理。游标可以表示任意合法的下进行查询的管理
21、。游标可以表示任意合法的SQL SELECT语句。游标通常是任何语句。游标通常是任何PL/SQL应用的基应用的基本构建块,它们为数据库中存储的数据集合上的操本构建块,它们为数据库中存储的数据集合上的操作提供了循环机制。如果还需要更新,使用作提供了循环机制。如果还需要更新,使用FOR UPDATE子句。子句。1-341 声明游标声明游标游标的声明包括两个部分:游标名称和这个游标所游标的声明包括两个部分:游标名称和这个游标所用到的用到的SQL语句。语句。PL/SQL语言中语法格式为:语言中语法格式为:CURSOR 游标名称游标名称 IS 查询语句查询语句(SELECT语句语句);例如,例如,CUR
22、SOR Student_list IS SELECT StudentNo FROM StudentInfo ORDER BY StudentNo;如同其它变量的声明一样,声明游标的这一段代码如同其它变量的声明一样,声明游标的这一段代码是不执行的,不能将是不执行的,不能将DEBUG时的断点设在这一代时的断点设在这一代码行上,也不能用码行上,也不能用IFEND IF语句来声明两个同名语句来声明两个同名的游标。的游标。1-352 打开游标打开游标要使用一个已经声明的游标,需要先打开它。可以要使用一个已经声明的游标,需要先打开它。可以使用使用PL/SQL的的OPEN语句,其语法如下:语句,其语法如下:
23、OPEN 游标名称;游标名称;当打开一个游标时,和该游标相关的当打开一个游标时,和该游标相关的SQL语句就会语句就会传递到传递到Oracle平台上,并得到执行,例如打开上文平台上,并得到执行,例如打开上文的游标;的游标;OPEN Student_list;1-363 提取数据提取数据使用使用FETCH语句从游标中取出数据。该语句每次语句从游标中取出数据。该语句每次返回一行数据。每次取数据时,返回一行数据。每次取数据时,PL/SQL都将指向都将指向通过游标查询要返回行的下一行数据。其语法为:通过游标查询要返回行的下一行数据。其语法为:FETCH 游标名称游标名称INTO 变量变量1,变量,变量2
24、,;其中,变量用于存储查询结果。例如,要将上文中其中,变量用于存储查询结果。例如,要将上文中的游标的游标Student_list中的数据存入记录型变量中的数据存入记录型变量StudentA中,使用如下语句:中,使用如下语句:FETCH Student_listINTO StudentA;1-37使用使用FETCH语句时需注意以下几点:语句时需注意以下几点:对游标执行对游标执行FETCH语句,可以从工作区中的第一语句,可以从工作区中的第一条记录开始通过拨动指针顺次取出全部记录。条记录开始通过拨动指针顺次取出全部记录。工作区内的游标指针只能向下移动,不能回退,要工作区内的游标指针只能向下移动,不能
25、回退,要想回退,必须关闭游标后再重新打开。想回退,必须关闭游标后再重新打开。在使用在使用FETCH语句之前,必须先打开游标,这样语句之前,必须先打开游标,这样才能保证工作区内有数据。才能保证工作区内有数据。INTO子句中的变量个数、顺序、类型必须与工作子句中的变量个数、顺序、类型必须与工作区中每行记录的字段数、顺序及数据类型一一对应区中每行记录的字段数、顺序及数据类型一一对应1-384 关闭游标关闭游标使用完游标后应将其关闭,来释放占用的资源。其使用完游标后应将其关闭,来释放占用的资源。其语法为:语法为:CLOSE 游标名称游标名称例如,关闭游标例如,关闭游标Student_list的操作如下
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PLSQL 程序设计 培训 教程
限制150内