资源预览内容
第1页 / 共51页
第2页 / 共51页
第3页 / 共51页
第4页 / 共51页
第5页 / 共51页
第6页 / 共51页
第7页 / 共51页
第8页 / 共51页
第9页 / 共51页
第10页 / 共51页
亲,该文档总共51页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1,第9章 PL/SQL基础,2,本章概述,前面已经介绍了SQL语句如何与数据库交互。但是,仅有SQL语句是不够的,它无法完成许多编程操作。必须对SQL语句进行扩展,增强其功能。这种扩展就是PL/SQL语言。PL/SQL是一种编程语言,用户可以使用PL/SQL编写过程、函数、程序包、触发器并且存储这些代码。这些代码可以由指定的用户使用。PL/SQL对大小写不敏感,用户可以定制适合自己的编码标准。 本章全面介绍PL/SQL语言的内容。,3,本章要点,理解PL/SQL程序块的结构 如何在PL/SQL中声明变量和常量 理解SQL数据类型与PL/SQL数据类型之间的差别 怎样使用游标技术在用户代码中将SQL与PL/SQL集成 在用户代码中如何使用循环结构和条件语句 怎样捕获和控制用户代码中的潜在错误,4,教学过程,9.1 概述 9.2 声明 9.3 PL/SQL数据类型 9.4 PL/SQL集合 9.5 游标 9.6 控制语句 9.7 错误处理,5,9.1 概述,PL/SQL是基于Ada编程语言的结构化编程语言,是由Oracle公司从版本6开始提供的专用于Oracle产品的数据库编程语言。用户可以使用PL/SQL语言编写过程、函数、程序报、触发器等PL/SQL代码,并且把这些代码存储起来,以便由具有适当权限的数据库用户重新使用。 PL/SQL对大小写不敏感,因此用户应该选择符合自己的编码标准来描述性地规范自己的PL/SQL代码形式。 PL/SQL代码使用了程序块,利用模块化方式进行构建。,6,示例程序块,set serveroutput on declare example_text varchar2(100); begin example_text:=欢迎您!; dbms_output.put_line(example_text); exception when others then dbms_output.put_line(出现异常了); raise; end;,7,查看保留字,SQLhelp reserved words,8,9.2 声明,前面已经介绍过,可以声明将要在PL/SQL代码中使用的变量和常量。声明变量时可以选择是否为变量赋值。但是,常量必须初始化。之后,就可以在指定的PL/SQL代码块中使用这些变量和常量。,9,9.2.1 变量和常量,用户使用的所有变量和常量都必须在程序块中的声明部分定义。对于每一个变量,用户都必须规定名称和数据类型,以便在可执行部分为其赋值。 在何处为变量赋值是可以选择。既可以选择在可执行部分中为变量赋值,也可以选择在声明变量时同时为其赋值。如图9-4所示是这两种赋值方式。其中,第一个示例在可执行部分中为变量赋值,而在第二个示例中,声明变量时同时赋值。但是,这两种赋值的结果完全一样。第二个示例使用了关键字null。null关键字表示什么都不做。 常量声明与变量声明类似,但是也有一些区别。首先需要明白,常量的值是不能改变的。因此,用户必须在声明常量时为其赋值,而且还必须在数据类型的左边使用constant关键字。,10,示例,declare example_number_constant constant number:=60; begin null; end;,declare example_number_constant constant number; begin null; end;,declare example_number_constant constant number; begin example_number_constant:=50; end;,11,9.2.2 为变量和常量赋值,用户可以使用很多方法为变量(在程序块的声明部分和可执行部分)和常量(在声明部分)赋值。最常用的赋值方法是使用PL/SQL的赋值运算符(:=)。赋值运算符的语法格式如下: variable datatype := expression; - 在程序块的声明部分 variable := expression; - 在程序块的可执行部分 在程序块的声明部分初始化变量时,可以使用default关键字。使用default关键字为变量赋值,表示在可执行部分既可以直接引用该变量的值,也可以重新为该变量赋值。常量赋值一般不使用default。 在声明变量时,可以为变量指定not null属性。not null属性表示该变量不允许空,必须为其赋予明确的值。,12,示例,declare example_number_constant constant number default 2; example_number_variable number default 3; begin example_number_constant:=5; example_number_variable:=120; end;,13,9.2.3 可视性和作用域,当声明变量和常量时,有一些控制用户声明的作用域和可视性的规则。作用域是用户能够引用变量名称标识符的程序块。只有用户处于可以使用非限定名称引用标识符的程序域时,标识符才是可视的。也就是说,如果在该作用域中,没有必要使用定义标识符的程序块名称作为标识符的前缀,那么该标识符是可视的。 在单独的程序块中,整个程序块都是在声明部分定义的标识符的作用域,标识符都是可视的。 在嵌套程序块中,父块本身和任何嵌套块都是在父块中定义的标识符的作用域,这些标识符都是可视的。在子块声明中定义的标识符只有在子块本身中才处于其作用域,才是可视的。,14,示例,set serveroutput on declare example_parent_number number; begin example_parent_number:=1; declare example_child_number number:=2; begin dbms_output.put_line(Parent_child=|to_char(example_parent_number+example_child_number); end; example_child_number:=3; end;,15,9.2.4 定义不确定内容,前面的许多示例都引用了null关键字。null关键字表示缺少、不可知或不适用等含义。从本质上来讲,null关键字表示没有内容。 在PL/SQL程序块中,如果引用某个已经声明的变量,且没有为该变量赋值,那么该变量的值就是null。也就是说,null通常会赋予在声明时没有赋值的变量。 如下所示的示例声明了4个变量。但是,这4个变量都会产生相同的结果:具有null值的varchar2变量。,declare example_variable_1 varchar2(100); example_variable_2 varchar2(100) := ; example_variable_3 varchar2(100) := null; example_variable_4 varchar2(100) default null; begin null; end;,16,注意:,(1)如果为某个char类型的变量赋值,那么该变量就不是null。 (2)在PL/SQL代码的可执行部分,通常使用null关键字作为占位符,代替用户随后进行编码。 declare example_parent_number number; begin end;,17,9.2.5 使用%type和%rowtype,可以使用%type和%rowtype来声明变量,而不必指定特定的数据类型。这两个属性提供了这种方式:在声明变量时,不指定变量的数据类型,而由表/视图列或PL/SQL程序包变量来定义变量的数据类型。 %type和%rowtype可以用于不同的情况。 当用户声明单独的变量而不是记录时可以使用%type。 当用户声明表示表、视图或游标的完整行的记录变量时可以使用%rowtype。,18,示例,set serveroutput on declare example_dept departments%rowtype; example_another_dept departments.dep_name%type; begin example_dept.dep_id:=1000; example_dept.dep_name:=行政部; insert into departments(dep_id,dep_name) values (example_dept.dep_id,example_dept.dep_name); example_dept.dep_id:=1001; example_another_dept:=销售部; insert into departments(dep_id,dep_name) values (example_dept.dep_id,example_another_dept); dbms_output.put_line(example_dept.dep_name| and |example_another_dept); end;,19,9.3 PL/SQL数据类型,PL/SQL数据类型与SQL数据类型既有相同之处,也有不同之处。PL/SQL数据类型可以分为标量(scalar)类型、引用(reference)类型、复合(composite)类型、LOB类型。标量类型是只能存储单值的数据类型,它又可以进一步划分为字符类型、数值类型、逻辑类型、日期和时间类型。 本节重点介绍PL/SQL标量数据类型的特点。,20,9.3.1 字符数据类型,PL/SQL字符数据类型可以包含单个字符,也可以包含长度在32K以内的字符串。这些类型可以存储字母、数字和二进制数据,也可以存储数据库字符集所支持的所有字符。在使用这些类型定义变量时,一般都使用整数来定义其长度,单位是字节。 如表9-1(闪P216)所示列出了PL/SQL字符数据类型的名称和特点。需要注意的是,虽然varchar2的两种子类型,即varchar和string,能够和varchar2替换使用,但是Oracle还是建议使用varchar2。因为在为未来的某个时候,varchar可能会变成与varchar2不同的数据类型。,21,9.3.2 数值数据类型,在Oracle Database 10g系统中,常用的数值类型包括binary_double、binary_float、binary_integer、number、pls_integer。 binary_double是Oracle Database 10g系统新引入的一种数值类型,它是IEEE-754标准的双精度浮点模型。 binary_float也是Oracle Database 10g系统新引入的一种数值类型,它是一种单精度类型。 binary_integer数据类型存储数值的范围是2147483647+2147483647。 PL/SQL中的number类型与数据库中的number类型含义相同。这种类型可以存储浮点值和整数值。 pls_integer是-231231之间有符号的整数,提供了从-21474836482147483648的范围。 其子类型见(闪P218),22,9.3.3 逻辑数据类型,在PL/SQL程序块中可以使用boolean数据类型,即逻辑数据类型。该数据类型不能用于SQL中数据库的列。 boolean变量的值可以是true、false和null,它能够作为条件语句的单一参数。需要注意的是,在使用逻辑数据类型赋值时,不能使用引号。在如图9-12所示的示例中有两个示例。在第一个示例中,由于逻辑值true有引号,所以出现了错误。第二个示例将逻辑值true直接赋予逻辑变量,所以赋值成功。,declare example_boolean boolean; b
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号