收藏 分享(赏)

Lesson-09.ppt

上传人:dzzj200808 文档编号:3312865 上传时间:2018-10-11 格式:PPT 页数:33 大小:1.13MB
下载 相关 举报
Lesson-09.ppt_第1页
第1页 / 共33页
Lesson-09.ppt_第2页
第2页 / 共33页
Lesson-09.ppt_第3页
第3页 / 共33页
Lesson-09.ppt_第4页
第4页 / 共33页
Lesson-09.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

1、PL/SQL程序设计,成都信息工程学院 软件工程系,PL/SQL概述,PL/SQL程序设计,PL/SQL(procedure language/SQL)语言是Oracle对SQL语言的过程化扩充,是一个完整的编程语言。 PL/SQL实现了过程化语句(如分支、循环等)与SQL语句的无缝连接,将过程化语言的数据处理能力与SQL语言的访问数据库的能力有机地结合在一起。 PL/SQL语言在Oracle系统中是核心的编程语言,它应用于很多方面,如存储过程、触发器、包、函数和Web应用等。 PL/SQL语言编写的不是客户端程序,而是服务器端的程序,PL/SQL体系结构,PL/SQL程序设计,PL/SQL引

2、擎可执行过程性语句,而将SQL语句发送到ORACLE服务器上的SQL语句执行器。,PL/SQL字符集,PL/SQL程序设计,合法字符 算术运算符 关系运算符,PL/SQL字符集,PL/SQL程序设计,合法字符,所有大小写字母 数字09。 符号:( ) +* /=!;:. % “# $ & _ | ? 。 其中一些字符用于编程,另一些用作算术运算操作符(除法、加法、幂等)及关系运算符(等于和不等于)。,PL/SQL字符集,PL/SQL程序设计,算术运算符,下面列出了PL/SQL中常用的算术运算符。 运算符意义 + 加法 减法 * 乘法 / 除法 * 幂 | 连接,PL/SQL字符集,PL/SQL

3、程序设计,关系运算符,下面列出了PL/SQL中常用的关系运算符。 运算符意义不等于 != 不等于 = 不等于大于 = 等于 = 大于等于 = 小于等于,PL/SQL字符集,PL/SQL程序设计,其他符号,PL/SQL为支持编程,还使用其他符号。下面列出了常用的符号。 ( ) 列表分隔(Jones,Roy,Abramson) ; 语句结束Procedure_name(arg1,arg2); . 项分隔(Select * from account.table_name;) 字符串界定符if var1=SANDRA := 赋值Rec_read:=rec_read+1; | 并置Full_name:=

4、Nahtan|Yebba - 注释符This is a comment /*与*/ 注释定界符/*This,too,is a comment*/,PL/SQL块结构,DECLARE Optional(可选) Variables, cursors, user-defined exceptions BEGIN Mandatory (必须) SQL statements PL/SQL statements EXCEPTION Optional (可选) Actions to perform when errors occur END; Mandatory(必须),PL/SQL程序设计,声明部分,执行

5、部分,异常处理部分,PL/SQL块结构,DECLAREv_variable VARCHAR2(5); BEGINSELECT column_nameINTO v_variableFROM table_name; EXCEPTIONWHEN exception_name THEN. END;,PL/SQL程序设计,块种类,匿名块 存储过程 函数,DECLAREBEGIN-statementsEXCEPTIONEND;,PROCEDURE name ISBEGIN-statementsEXCEPTIONEND name;,FUNCTION name RETURN datatype IS BEGIN

6、-statementsRETURN value; EXCEPTIONEND name;,PL/SQL程序设计,“匿名”(anonymous)块通常是动态生成,它只能被执行一次。 “子程序”(subprogram)是存储在数据库内部的过程、包、触发器和函数,通过显示调用可以执行该子程序。 “函数”(function)除了必须返回一个值外,它与存储过程(procedure)相似。 “触发器”(trigger)是存储在数据库内部的带名块。当触发事件出现时,触发器便被显示地执行。,PL/SQL程序结构,Anonymous block,Application trigger,Stored procedu

7、re/ function,Database trigger,Application procedure/ function,Packaged procedure/ function,PL/SQL程序设计,PL/SQL变量,PL/SQL程序设计,变量是PL/SQL中用来处理数据项所用的名字。程序员根据下列规则选择变量名称: 变量必须以字母(AZ)开头。 其后跟可选的一个或多个字母、数字(09)或特殊字符$、#或_。 变量长度不超过30个字符。 变量名中不能有空格。 23_skidoo 不合法 必须以字母起头 Nature_trali 合法 nature-trali 不合法 特殊字符只能是$#_

8、保留字不能用作变量名。,PL/SQL变量,Scalar 标量型 Composite 复合型 Reference 引用型 LOB (large objects) 大对象型,PL/SQL程序设计,PL/SQL变量 变量类型,非PL/SQL变量 链接变量,TRUE,PL/SQL变量,25-OCT-99,Atlanta,256120.08,PL/SQL程序设计,“Oracle Text(在Oracle8i中称为interMedia文本)是Oracle提供的一个服务集,它的功能十分强大,它可以为文档提供索引方法、进行检索,还可以对文档进行格式转换、存储和管理等。它不仅支持TXT、HTML等纯文本格式,还

9、支持很多种二进制格式的文档,如DOC、PPT、PDF,等等。并且Oracle Text还可用来对不同语种的文档进行检索。因为Oracle Text是完全集成在数据库核心内的,所以使用它对数据库中的文档进行检索的效率是很高的。因而Oracle公司将其描述成第四代文本引擎。”,声明PL/SQL变量,语法例子,PL/SQL程序设计,命名规则,在同一PL/SQL块中不能有两个相同的变量名。 在同一PL/SQL块中变量名不能和表的列名相同。,DECLAREempno NUMBER(4); BEGINSELECT empnoINTO empnoFROM empWHERE ename = SMITH; EN

10、D;,PL/SQL程序设计,变量赋值,v_ename := 张三;,v_hiredate := 31-DEC-98;,语法举例 为新职员预先设定一个参加工作时间,设定员工的名字,identifier := expr;,PL/SQL程序设计,变量的初始化和关键字,Using := 赋值操作符 DEFAULT NOT NULL,PL/SQL程序设计,标量数据类型,只有单一值 没有内部组成成分,25-OCT-99,Atlanta,“Oracle Text(在Oracle8i中称为interMedia文本)是Oracle提供的一个服务集,它的功能十分强大,它可以为文档提供索引方法、进行检索,还可以对文

11、档进行格式转换、存储和管理等。它不仅支持TXT、HTML等纯文本格式,还支持很多种二进制格式的文档,如DOC、PPT、PDF,等等。并且Oracle Text还可用来对不同语种的文档进行检索。因为Oracle Text是完全集成在数据库核心内的,所以使用它对数据库中的文档进行检索的效率是很高的。因而Oracle公司将其描述成第四代文本引擎。”,TRUE,256120.08,PL/SQL程序设计,基本标量数据类型,VARCHAR2 (maximum_length) NUMBER (precision, scale) DATE CHAR (maximum_length) LONG LONG RAW

12、 BOOLEAN BINARY_INTEGER,PL/SQL程序设计,基本标量数据类型,VARCHAR2 (maximum_length),PL/SQL程序设计,Varchar2为可变长的字母数字数据类型。在PL/SQL中,varchar2的最大长度为32767字节。 在declare部分声明,其定义以分号(;)结束,所有varchar2变量的定义类似于下面的定义: variable_name varchar2(max_length); 括号中的长度值为本变量的最大长度且必须是正整数,如:vc_field varchar2(10); 在定义变量时,可以同时对其进行初始化,格式为:vc_fiel

13、d varchar2(10):=STARTVALUE;,基本标量数据类型,NUMBER (precision, scale),PL/SQL程序设计,number类型数据可用来表示所有的数值数据,说明格式为:num_field number(precision,scale);其中,precision可以有138个数字位,而scale(-84127)表示在precision位数字中小数点后的数字位数,下面的定义:num_fieldnumber(12,2);表示num_field是一个整数部分最多10位、小数部分最多2位的变量。,基本标量数据类型,DATE,PL/SQL程序设计,此数据类型用于保存固

14、定长度的日期值,date变量的说明为:date_field date; 在缺省时,Oracle以DD-MON-YY格式显示日期。因此,2004年9月9日显示为09-SEP-04。 PL/SQL中编程处理日期必须使用这种格式。是否可以说用户必须用数据库缺省的日期格式,除非用户用TO_CHAR或TO_DATE。 提示:Oracle中还有DD-MON-RR的日期格式,用来表示4位年份以确保Oracle不会省去两位纪元数。,基本标量数据类型,BOOLEAN,PL/SQL程序设计,Boolean变量只有三种值TRUE、FALSE和NULL。 Boolean变量一般和逻辑操作符AND, OR, 和 NOT

15、一起使用。,标量变量声明,v_job VARCHAR2(9); v_count BINARY_INTEGER := 0; v_total_sal NUMBER(9,2) := 0; v_orderdate DATE := SYSDATE + 7; c_tax_rate CONSTANT NUMBER(3,2) := 8.25; v_valid BOOLEAN NOT NULL := TRUE;,Examples,PL/SQL程序设计,%TYPE属性,声明一个变量根据下述条件来声明: 数据库中定义的列 先前已经声明的变量 使用%TYPE属性的前缀: 数据库的表和列名 先前声明的变量名,PL/SQ

16、L程序设计,用%TYPE属性声明变量,Examples,.v_ename emp.ename%TYPE;v_balance NUMBER(7,2);v_min_balance v_balance%TYPE := 10; .,PL/SQL程序设计,这种定义方法有以下好处: 在不清楚EMP表的列定义细节的情况下,也可以保证两者定义一致。 如果改变数据库中EMP表的ename列定义,不需要修改PL/SQL程序中V_ENAME变量定义。,*复合数据类型,Types PL/SQL TABLES语法:TYPE tabletype IS TABLE OF type INDEX BY BINARY_INTEG

17、ER;举例:TYPE t_CharacterTable IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER ; PL/SQL RECORDS语法:TYPE record_type IS RECORD ( field1 type1 NOT NULL :=expr1,field2 type2 NOT NULL :=expr2,fieldn typen NOT NULL :=exprn ); %ROWTYPE属性:声明一个与数据库表的行具有相同类型的记录变量,PL/SQL程序设计,*LOB Datatype Variables,技巧 (CLOB),相片

18、(BLOB),电影 (BFILE),NCLOB,PL/SQL程序设计,链接变量,O/S 链接变量,PL/SQL程序设计,链接变量(bind variable)是在SQL*PLUS中建立的变量,然后可以在PL/SQL中引用。,引用非PL/SQL变量 链接变量,在PL/SQL中引用链接变量,必须在变量名前使用一个冒号(:),:ret_val:= 1;,PL/SQL程序设计,在SQL*PLUS中用VARIABLE命令建立链接变量:,SQL VARIABLE ret_val NUMBER,SQL PRINT ret_val,在SQL*PLUS中显示链接变量的值:,Thank You! to be continued,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报