PLSQL编程1

上传人:一*** 文档编号:242892579 上传时间:2024-09-11 格式:PPT 页数:39 大小:541.50KB
返回 下载 相关 举报
PLSQL编程1_第1页
第1页 / 共39页
PLSQL编程1_第2页
第2页 / 共39页
PLSQL编程1_第3页
第3页 / 共39页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,五、,PL/SQL,编程,PL/SQL,基础,PL/SQL,的程序结构,过程、函数和包,触发器,游标,本章的学习内容,:,5.1,PL/SQL,基础,5.1.1 PL/SQL,语言概述,PL/SQL,语言是,Procedural Language/SQL(,过程化,SQL),的缩写,是,Oracle,对关系型数据库语言,SQL,的过程化扩充,它将数据库技术与过程化程序设计语言联系起来,将变量、控制结构、过程和函数等结构化程序设计要素引入,SQL,语言中,以提高结构化语言对数据库的支持能力,提高程序执行的效率。,PL/SQL,产生的原因:,SQL,缺少过程控制,在,C/S,架构下,SQL,降低了网络的效率,其它编程语言在可移植性上的不足,SQL,没有事务控制的能力,5.1,PL/SQL,基础,5.1.2 PL/SQL,语句块,PL/SQL,语言编写的程序的基本单位是“块”,(BLOCK),,组成程序的块可以顺序出现,也可以相互嵌套,每个块实现一个独立功能 。块分为匿名,(anonymous),块和命名,(named),块两种。匿名块是没有名称的块,它只能执行一次;而命名块是具有名字的语句块,如存储过程、函数、包和触发器等,可以执行多次。,PL/SQL,语句块一般包含,3,个部分:,声明部分,执行部分,异常处理部分,5.1,PL/SQL,基础,5.1.2 PL/SQL,语句块,DECLARE,定义语句段, ,声明部分,BEGIN,执行语句段,执行部分,EXCEPTION,异常处理语句段, ,异常处理部分,END;,5.1,PL/SQL,基础,5.1.2 PL/SQL,语句块,例,1,定义一个,PL/SQL,语句块。,DECLARE,text varchar2(100);,BEGIN,text:=Hello World;,dbms_output.put_line(text,);,EXCEPTION,when others then,dbms_output.put_line,(,引发了一个异常,!);,raise;,END;,5.1,PL/SQL,基础,5.1.2 PL/SQL,语句块,例,1,在,SQLPlus,中的执,行结果,5.1,PL/SQL,基础,5.1.3 PL/SQL,变量和常量,PL/SQL,变量是可以存储数据的内存单元,其内容随着程序的运行可以发生变化,而常量的值不能改变。,声明语法如下:,CONSTANTNOT NULL:=|DEFAULT;,注意,:,必须以字母开头,其后可跟字母、数字、下划线、,“,#”,和“,$”,长度不能超过,30,个字符,常量必须在声明时赋值,每个变,/,常量声明是占一行,行尾使用分号“,;”,结束,5.1,PL/SQL,基础,5.1.4 PL/SQL,常用数据类型,常用的数据类型分为四种:标量、复合、引用和,LOB,1.,标量类型,CHAR (LCHAR|BYTE) , MAXL=32767B,VARCHAR2 (LCHAR|BYTE) , MAXL=32767B,NCHAR (L),和,NVARCHAR2 (L),LONG,、,LONG RAW,和,RAW(L) , MAXL=32760B,NUMBER(P,S) DEC,、,DECIMAL,、,DOUBLE PRECISION,、,FLOAT,、,INTEGER,、,INT,、,NUMERIC,、,REAL,、,SMALLINT,PLS_INTEGER -2,31,-1,2,31,-1,BINARY_INTEGER,DATE,公元前,4712,年,1,月,1,日,-,公元,9999,年,12,月,31,日,TIMESTAMP(P),5.1,PL/SQL,基础,5.1.4 PL/SQL,常用数据类型,1.,标量类型,(,续,),TIMESTAMP (P) WITH ZONE,INTERVAL YEAR(P) TO MONTH,INTERVAL DAY(P1) TO SECOND(P2),BOOLEAN,2.,复合类型,复合类型是用户自定义的,常用的复合类型有记录、表和数组。复合类型是标量类型的组合,使用这些数据类型可以拓宽应用范围,对于复合类型,应先定义,再声明,最后才能使用,5.1,PL/SQL,基础,(1),使用,%TYPE,ps_no,student.s_no%TYPE,;,5.1.4 PL/SQL,常用数据类型,2.,复合类型,(2),记录类型,记录类型是将各个独立分离的但逻辑上又有一定相关性的单个变量有机地结合在一起,作为一个整体处理。通常记录中的每一个变量都是惟一的,当作为一个整体时,记录本身是没有值的,但它包含的每一个变量都拥有自己的值。记录通常用来表示数据库表中的一行,5.1,PL/SQL,基础,5.1.4 PL/SQL,常用数据类型,(3),记录的定义、声明与引用,定义记录类型,定义记录类型的一般语法为:,TYPE IS RECORD(,NOT NULL:=;,NOT NULL:=;,NOT NULL:=;,5.1,PL/SQL,基础,5.1.4 PL/SQL,常用数据类型,定义记录例子,:,将学生信息定义为记录类型如下:,TYPE,rec_student,IS RECORD(,ps_no,CHAR(6),ps_name,CHAR(8),ps_sex,CHAR(2),ps_birthday,DATE,ps_score,NUMBER(5,1),ps_addf,NUMBER(3,1),pclass_no,CHAR(5) );,5.1,PL/SQL,基础,5.1.4 PL/SQL,常用数据类型,声明记录变量,声明格式为,:, ,例如,:,r_student,rec_student,;,记录的引用,声明格式为,:,.,例如,:,r_student.ps_no,5.1,PL/SQL,基础,5.1.4 PL/SQL,常用数据类型,5.1,PL/SQL,基础,5.1.4 PL/SQL,常用数据类型,记录变量的赋值,单个数据项赋值,整体赋值,注意:,整体赋值,则两个记录变量必须被声明为同一记录类型,不同的记录类型之间单个数据项赋值总是合法的,5.1,PL/SQL,基础,5.1.4 PL/SQL,常用数据类型,(4),使用,%ROWTYPE,可以使用,%ROWTYPE,定义与数据库表结构相同的记录变量。使用,%ROWTYPE,定义记录变量,相当于给数据库的一行记录命名,可以直接使用“记录变量名,.,数据库表中字段名”来引用记录变量数据项的值,例如,:,r_student,student%ROWTYPE,;,r_student.s_name,;,5.1,PL/SQL,基础,5.1.4 PL/SQL,常用数据类型,(5),表的定义、声明与引用,表是一种比较复杂的数据结构,与数据库中的表是有区别的。数据库表是一种二维表,是以数据库表的形式存储的。这里的表是一种复合数据类型,是保存在数据缓冲区中的没有特别的存储次序的、可以离散存储的数据结构,它可以是一维的,也可以是二维的。,5.1,PL/SQL,基础,5.1.4 PL/SQL,常用数据类型,(5),表的定义、声明与引用,定义表类型,定义表类型的语法为:,TYPE IS TABLE OF ,INDEX BY BINARY_INTEGER;,表类型名是用户定义的,数据类型是表中所有元素的数据类型,索引变量缺省为,BINARY_INTER,类型的变量,索引变量的值只是一个标记,没有大小、先后之分,5.1,PL/SQL,基础,5.1.4 PL/SQL,常用数据类型,(5),表的定义、声明与引用,声明表变量, ,表变量的引用, ( ),注意,:,先定义,后声明,再引用。,5.1,PL/SQL,基础,5.1.4 PL/SQL,常用数据类型,例,:,在屏幕上显示如下信息,:“,中国,您好!”,“,世界,您好!,”,SET SERVEROUT ON;,DECLARE,TYPE table1 IS TABLE OF varchar2 (8) INDEX,BY BINARY_INTEGER;,TYPE table2 IS TABLE OF,student.s_name%type,INDEX,BY BINARY_INTEGER;,t1 table1;,t2 table2;,BEGIN,t1(1):=,中国,;,t1(-1):=,您好,!;,t2(0):=,世界,;,t2(10):=,您好,!;,DBMS_OUTPUT.PUT_LINE(t1(1)|t1(-1);,DBMS_OUTPUT.PUT_LINE(t2(0)|t2(10);,END;,5.1,PL/SQL,基础,5.1.4 PL/SQL,常用数据类型,例,:,查询,ayz.student,表中学号为,000001,的学生姓名,SET SERVEROUTPUT ON;,DECLARE,TYPE table1 IS TABLE OF,ayz.student%ROWTYPE,INDEX BY BINARY_INTEGER;,t1 table1;,BEGIN,SELECT * INTO t1(2) FROM,ayz.student,WHEREs_no,=000001;,DBMS_OUTPUT.PUT_LINE(t1(2).s_name);,END;,5.1,PL/SQL,基础,5.1.4 PL/SQL,常用数据类型,使用表应注意,:,表元素是通过索引变量定位的,索引变量也称为,Key,值,默认是,BINARY_INTEGER,类型,声明表时没有固定表中的元素数目,赋值时才创建表元素,一维表与二维表的差别,:,二维表只是在表的数据类型上与一维表不同,().,5.1,PL/SQL,基础,5.1.4 PL/SQL,常用数据类型,表的属性,语法如下,:,.,属性,说明,属性,说明,COUNT,返回表中的元素总数,LAST,返回表中最后元素的索引值,DELETE,删除表中元素,NEXT,返回表中指定索引值的下一元素索引值,EXISTS,指定索引值的表元素是否存在,PRIOR,返回表中指定索引值的上一元素索引值,FIRST,返回表中第一个元素的索引值,5.1,PL/SQL,基础,5.1.4 PL/SQL,常用数据类型,(,6,)数组,数组也是一种复合类型,数组在声明时就确定了元素的数目,,同时数组存储时,其元素的次序是固定且连续的,索引变量,从,1,开始一直到其定义的最大值为止,定义数组类型,定义数组类型的语法,TYPEIS VARRAY()OF;,例如,:,TYPE varray1 IS VARRAY(3) OF varchar(8);,5.1,PL/SQL,基础,5.1.4 PL/SQL,常用数据类型,(,6,)数组,声明数组变量,声明数组变量的语法, ;,例如,:,v1 varray1;,数组的引用,引用方法如下,:, (),5.1,PL/SQL,基础,5.1.4 PL/SQL,常用数据类型,例,:,在屏幕上显示如下信息,:,一个学生姓名和,“,同一个世界,同一 个梦想!,”,set,serveroutput,on;,DECLARE,TYPE varray1 IS VARRAY(3) OF,ayz.student.s_name%TYPE,;,TYPE varray2 IS VARRAY(4) OF varchar2(12);,v1 varray1;,v2 varray2;,BEGIN,v1:=varray1(null,null,null);,v2:=varray2(,同一个世界,同一个梦想,!);,SELECT,s_name,INTO v1(1) FROM,ayz.student,WHERE,s_no,=000001;,DBMS_OUTPUT.PUT_LINE(v1(1);,DBMS_OUTPUT.PUT_LINE(v2(1)|v2(2)|v2(3)|v2(4);,END;,5.1,PL/SQL,基础,5.1.4 PL/SQL,常用数据类型,数组的属性,语法如下,:,.,属性,说明,属性,说明,COUNT,返回数组中的元素总数,LAST,返回数组中最后元素的索引值,DELETE,删除数组中元素,NEXT,返回数组中指定索引值的下一元素索引值,EXISTS,指定索引值的数组元素是否存在,PRIOR,返回数组中指定索引值的上一元素索引值,FIRST,返回数组中第一个元素的索引值,5.1,PL/SQL,基础,5.1.4 PL/SQL,常用数据类型,3.,引用类型,引用类型是用户定义的指向某一数据缓冲区的指针,与,C,语言中的类似。游标即为,PL/SQL,语言的引用类型,详细内容将在本章第,5,节中介绍,4. LOB,类型,LOB,类型专门用来存储大型对象的数据。大型对象包括大文本、图形,/,图像、视频等。这些大型对象可以包含无结构特征的数据块,最大存储最不超过,4GB,。常用的,LOB,类型有,BFIEL,、,BLOB,、,CLOB,和,NCLOB,。,5.1,PL/SQL,基础,5.1.4 PL/SQL,常用数据类型,4. LOB,类型,(,1,),BFILE,在数据库外的操作系统文件中存储大型二进制文件,每个,BFILE,变量存储着一个文件定位器(包含一个路径别名来指定一个完整的路径),用来指向服务器上的大型二进制文件。,(,2,),BLOB,在数据库内存储大型二进制对象,每个,BLOB,对象存储一个定位器指向大型二进制对象。,5.1,PL/SQL,基础,5.1.4 PL/SQL,常用数据类型,4. LOB,类型,(,3,),CLOB,在数据库内存储大型的字符型数据,每个,CLOB,对象存储一个定位器,指向大型的字符型数据。,(,4,),NLOB,在数据库内存储大型,NCHAR,类型数据,每个,NLOB,对象存储一个定位器指向大型,NCHAR,类型数据。,说明:,以上四种,LOB,类型中,BFILE,不支持事务操作,其它支持,图形,/,图像多用,BLOB,,大量的中文等文本使用,CLOB,,国 际字符比较多用,NLOB,操作系统文件用,BFILE,5.1,PL/SQL,基础,5.1.5 PL/SQL,运算符,(,1,) 赋值运算符,:,=,是将运算符右边表达式的值赋给其左边的变量,(,2,) 算术运算符,加(,+,)、减(,-,)、乘(*)、除(,/,)、乘方(*),(,3,) 关系运算符,等于(,=,)、不等于(,或,!=,)、大于(,)、小于(,=,)、小于(,=,)、介于(,BWTEENAND,)、测试(,IN,)、模糊匹配(,LIKE,)、是否为空(,IS NULL,),5.1,PL/SQL,基础,5.1.5 PL/SQL,运算符,(,4,)逻辑运算符,逻辑与,(AND),、逻辑或,(OR),、逻辑非,(NOT),(,5,) 字符串连接运算符,“,|”,用于将两个字符串连接起来,5.1.6 PL/SQL,表达式,表达式由操作数和运算符构成,操作数:变量、常量或函数,操作数和运算符共同决定该表达式的类型,在赋值运算符的右边或作为一条,PL/SQL,语句的一部分,5.2,PL/SQL,的程序结构,5.2.1,顺序结构,顺序结构就是执行程序时,按着语句在程序中的先后位置,顺序执行。,5.2.2,选择结构,选择结构就是执行程序时,根据选择条件,执行满足选择,条件的语句序列。其语法如下:,(1) IF THEN,ELSE IF THEN,ELSE ,END IF;,5.2,PL/SQL,的程序结构,5.2.2,选择结构,例:求出三个数中最大的数,(2) CASE,条件选择器,WHEN,值,1 THEN,语句,1;,WHEN,值,n THEN,语句,n;,ELSE,语句,n+1; ,END CASE;,例:求出三个数中最大的数,例,:,根据城市名称查找该城市的代理人的姓名,5.2.3,循环结构,5.2,PL/SQL,的程序结构,循环结构就是执行程序时,重复执行某些语句序列,被重复执行的语句序列称为循环体,.,(1)LOOP,循环,LOOP-EXIT-END LOOP,循环,其语法如下,:,LOOP,IF THEN,EXIT;,END LOOP;,例,:,计算,1+2+3+100,的值,5.2.3,循环结构,5.2,PL/SQL,的程序结构,LOOP-EXIT-WHEN-END LOOP,循环,其语法如下,:,LOOP,EXIT WHEN;,END LOOP;,(2)WHILE-LOOP-END LOOP,循环,WHILE,循环的语法如下,:,WHILELOOP,END LOOP;,例,:,计算,1+2+3+100,的值,5.2.3,循环结构,5.2,PL/SQL,的程序结构,(3)FOR-IN-LOOP-END LOOP,循环,FOR,循环的语法如下,:,FORINREVERSE.LOOP,END LOOP;,循环变量可以在声明部分声明也可以不声明,若声明则以声明为准,循环变量被隐式的声明为,BINARY_INTEGER,类型的变量,其循环的步长为,1,循环的次数为,:,上界值,-,下界值,+1,例:利用,FOR,循环,REVERSE,控制输出,10,、,9,、,81,5.2.4 NULL,语句与,GOTO,语句,5.2,PL/SQL,的程序结构,(1)NULL,NULL,语句不会执行任何操作,并且会直接将控制传递到,下一条语句。使用,NULL,语句的主要好处是可以提高,PL/SQL,程序的可读性。,(2)GOTO,GOTO,语句是一条无条件转移语句,能够使程序从某处无,条件转移到由标号标识的语句。语法如下:,GOTO,例,:,使用,GOTO,语句输出,1,10,的数值,本节课小结,PL/SQL,的优点和特征,一个基本单位,块,两类块,匿名块和命名块,三种控制结构,顺序、选择和循环,四种数据类型,标量、复合、引用和,LOB,五种运算符,赋值、算术、关系、逻辑和,字符串连接,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 营销创新


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!