第13章 DM数据库函数与游标_第1页
第13章 DM数据库函数与游标_第2页
第13章 DM数据库函数与游标_第3页
第13章 DM数据库函数与游标_第4页
第13章 DM数据库函数与游标_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

主讲教师:时间:202x.xx.xx第13章DM数据库函数与游标01系统内置函数

02存储函数目录CONTNETS04知识点小结03游标函数和游标对于学习DM数据库十分重要,数据库函数是指当需要分析数据清单中的数值是否符合特定条件时,使用数据库工作表函数。游标的一个常见用途就是保存查询结果,以便以后使用。游标的结果集是由SELECT语句产生,如果处理过程需要重复使用一个记录集,那么创建一次游标而重复使用若干次,比重复查询数据库要快得多。01系统内置函数

02存储函数目录CONTNETS04知识点小结03游标01PARTONE系统内置函数数值函数字符串函数日期时间函数统计函数系统内置函数

数值函数

数值函数即是在数据库查询操作中进行运算处理数据的数学方法封装成的函数,在实际应用中,灵活地运用数学函数会大大增加数据查询的准确度和灵活性。数值函数接受数值参数并返回数值作为结果。以下是一些函数的示例。系统内置函数函数ABS语法:ABS(n) 功能:返回n的绝对值。n必须是数值类型。例:查询现价小于10元或大于20元的信息。

语法:SELECTPRODUCTID,NAMEFROMPRODUCTION.PRODUCTWHEREABS(NOWPRICE-15)>5;查询结果:系统内置函数函数ACOS语法:ACOS(n)功能:返回n的反余弦值。n必须是数值类型,且取值在-1到1之间,函数结果从0到π。例:查询SELECTacos(0)。

查询结果:1.570796326794897E+000系统内置函数函数ASIN语法:ASIN(n)功能:返回n的反正弦值。n必须是数值类型,且取值在-1到1之间,函数结果从-π/2到π/2。例:查询SELECTasin(0)。

查询结果:0.000000000000000E+000系统内置函数函数ATAN语法:ATAN(n)功能:返回n的反正切值。n必须是数值类型,取值可以是任意大小,函数结果从-π/2到π/2。例:查询SELECTatan(1)。

查询结果:7.853981633974483E-001系统内置函数函数ATAN2语法:ATAN2(n,m)功能:返回n/m的反正切值。n,m必须是数值类型,取值可以是任意大小,函数结果从-π/2到π/2。例:查询SELECTatan2(0.2,0.3)。

查询结果:5.880026035475676E-001系统内置函数函数CEIL语法:CEIL(n)功能:返回大于等于n的最小整数。n必须是数值类型。返回类型与n的类型相同。例:查询SELECTCEIL(15.6)。

查询结果:1601PARTONE系统内置函数数值函数字符串函数日期时间函数统计函数系统内置函数ASCII函数语法:ASCII(char)功能:返回字符char对应的整数(ASSIC值)。例:查询SELECTASCII('B'),ASCII('中')。

查询结果:6654992系统内置函数ASCIISTR函数语法:ASCIISTR(char)功能:将字符串char中,非ASCII的字符转成\XXXX(UTF-16)格式,ASCII字符保持不变。例:非unicode库下,执行如下操作:SELECTCHr(54992),ASCIISTR('中'),ASCIISTR(CHr(54992))。

查询结果:中\4E2D\4E2D系统内置函数BIT_LENGTH函数语法:BIT_LENGTH(char)功能:返回字符串的位(bit)长度。例:查询SELECTBIT_LENGTH('ab')。

查询结果:16系统内置函数CHAR函数语法:CHAR(n)功能:返回整数n对应的字符。例:查询SELECTCHAR(66),CHAR(67),CHAR(68),CHAR(54992)。

查询结果:BCD中系统内置函数CHAR_LENGTH函数语法:CHAR_LENGTH(char)功能:返回字符串char的长度,以字符作为计算单位,一个汉字作为一个字符计算。字符串尾部的空格也计数。例:查询SELECTCHAR_LENGTH('我们')。

查询结果:201PARTONE系统内置函数数值函数字符串函数日期时间函数统计函数系统内置函数

日期时间函数的参数至少有一个是日期时间类型,返回值一般为日期时间类型和数值类型。

由于DM支持儒略历,并考虑了历史上从儒略历转换至格里高利日期时的异常,不计算'1582-10-05'到'1582-10-14'之间的10天,因此日期时间函数也不计算这10天。。系统内置函数ADD_DAYS函数语法:ADD_DAYS(date,n)功能:回日期date加上相应天数n后的日期值。n可以是任意整数,date是日期类型(DATE)或时间戳类型(TIMESTAMP),返回值为日期类型(DATE)。例:查询SELECTADD_DAYS(DATE'2021-01-12',1)。

查询结果:2021-01-13系统内置函数ADD_MONTHS函数语法:ADD_MONTHS(date,n)功能:返回日期date加上n个月的日期时间值。n可以是任意整数,date是日期类型(DATE)或时间戳类型(TIMESTAMP),返回类型固定为日期类型(DATE)。如果相加之后的结果日期中月份所包含的天数比date日期中的日分量要少,那么结果日期的该月最后一天被返回。例:查询SELECTADD_MONTHS(DATE'2021-01-31',1)。

查询结果:2021-02-29系统内置函数ADD_WEEKS函数语法:ADD_WEEKS(date,n)功能:返回日期date加上相应星期数n后的日期值。n可以是任意整数,date是日期类型(DATE)或时间戳类型(TIMESTAMP),返回类型固定为日期类型(DATE)。例:查询SELECTADD_WEEKS(DATE'2021-01-12',1)。

查询结果:2021-01-19系统内置函数CURDATE函数语法:CURDATE()功能:返回当前日期值,结果类型为DATE。例:查询SELECTCURDATE()。

查询结果:执行此查询当天日期,如2021-02-2701PARTONE系统内置函数数值函数字符串函数日期时间函数统计函数系统内置函数统计函数主要包括count,sum,averege,max,min等。这些统计函数的作用主要是为了方便对同一组数据进行运算。由于第八章节查询时已讲过相关内容,此处不再赘述。01系统内置函数

02存储函数目录CONTNETS04知识点小结03游标存储函数

在数据库中都有函数,这些函数属于系统函数。除此之外用户也可以编写用户自定义函数。用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序。调用时如同系统函数一样,如max(value)函数,其value被称为参数。02PARTTWO存储函数创建存储函数参数和变量调用存储函数重新编译存储函数删除存储函数存储函数存储函数与存储过程(第14章会详细介绍)在结构和功能上十分相似,主要的差异在于:存储过程没有返回值,调用者只能通过访问OUT或IN,OUT参数来获得执行结果,而存储函数有返回值,它把执行结果直接返回给调用者。存储过程中可以没有返回语句,而存储函数必须通过返回语句结束。不能在存储过程的返回语句中带表达式,而存储函数必须带表达式。存储过程不能出现在一个表达式中,而存储函数可以出现在表达式中。存储函数例:在模式RESOURCES下创建一个名为fun_1的存储函数。该函数的返回类型为INT类型。两个输入参数a,b,返回a,b的和。具体语句如下:CREATEORREPLACEFUNCTIONRESOURCES.fun_1(aINT,bINT)RETURNINTASsINT;BEGINs:=a+b;RETURNs;EXCEPTIONWHENOTHERSTHENNULL;END;02PARTTWO存储函数创建存储函数参数和变量调用存储函数重新编译存储函数删除存储函数存储函数参数的定义和赋值

存储函数可以定义多个参数,用来给模块传送数据及向外界返回数据。定义、参数时,必须说明名称、参数模式和数据类型。参数定义和赋值参照变量的定义和赋值。使用赋值符号“:=”或关键字DEFAULT,可以为IN参数指定一个缺省值。如果调用时未指定参数值,系统将自动使用该参数的缺省值。存储函数例:定义一个函数,定义两个变量,并对变量赋予初始值。具体语句如下:CREATEFUNCTIONproc_def_arg(avarchar(10)default'abc',bINT:=123)ASBEGINPRINTa;PRINTb;END;存储函数变量的定义和赋值

变量的声明应在声明部分。声明一个变量需要给这个变量指定名字及数据类型。变量名必须以字母开头,包含数字、字母、下划线以及$、#符号,长度不能超过128字符,并且不能与DM的DMSQL程序保留字相同,变量名与大小写是无关的。变量的数据类型可以是基本的SQL数据类型,也可以是DMSQL程序数据类型,比如一个游标、异常等。02PARTTWO存储函数创建存储函数参数和变量调用存储函数重新编译存储函数删除存储函数存储函数调用存储函数

对存储过程的调用可通过CALL语句来完成,也可以什么也不加直接通过名字及相应的参数执行即可,两种方式没有区别。

对于存储函数,除了可以通过CALL语句和直接通过名字调用外,还可以通过SELECT语句来调用,且执行方式存在一些区别:

(1)通过CALL和直接使用名字调用存储函数时,不会返回函数的返回值,仅执行其中的操作;

(2)

通过SELECT语句调用存储函数时,不仅会执行其中的操作,还会返回函数的返回值。02PARTTWO存储函数创建存储函数参数和变量调用存储函数重新编译存储函数删除存储函数存储函数重新编译存储函数

存储函数或过程中常常会访问或修改一些数据库表、索引等对象,而这些对象有可能已被修改甚至删除,这意味着对应的存储模块已经失效了。

若用户想确认一个存储函数是否还有效,可以重新编译该存储函数。例:对存储函数DMHR.F_GET_EMPNUM进行重新编译。

语法:ALTERPROCEDUREDMHR.F_GET_EMPNUMCOMPILE;

02PARTTWO存储函数创建存储函数参数和变量调用存储函数重新编译存储函数删除存储函数01系统内置函数

02存储函数目录CONTNETS04知识点小结03游标游标

在数据库中,游标是一个十分重要的概念。游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。03PARTTHREE游标

隐式游标显式游标游标FOR循环游标变量引用游标游标隐式游标

隐式游标无须用户进行定义,每当用户在DMSQL程序中执行一个DML语句(INSERT、UPDATE、DELETE)或者SELECT...INTO语句时,DMSQL程序都会自动声明一个隐式游标并管理这个游标。

隐式游标的名称为“SQL”,用户可以通过隐式游标获取语句执行的一些信息。DMSQL程序中的每个游标都有%FOUND、%NOTFOUND、%ISOPEN和%ROWCOUNT四个属性,游标例:将孙丽的电话号码修改

语法:BEGINUPDATEPERSON.PERSONSETPHONEHERENAME='孙丽';IFSQL%NOTFOUNDTHENPRINT'此人不存在';ELSEPRINT'已修改';ENDIF;END;03PARTTHREE游标

隐式游标显式游标游标FOR循环游标变量引用游标游标显式游标

显式游标指向一个查询语句执行后的结果集区域。当需要处理返回多条记录的查询时,应显式地定义游标以处理结果集的每一行。

使用显式游标一般包括四个步骤:

(1)定义游标。

(2)打开游标。

(3)拨动游标。

(4)关闭游标。03PARTTHREE游标

隐式游标显式游标游标FOR循环游标变量引用游标游标游标FOR循环

游标通常与循环联合使用,以遍历结果集数据。实际上,DMSQL程序还提供了一种将两者综合在一起的语句,即游标FOR循环语句。游标FOR循环自动使用FOR循环依次读取结果集中的数据。当FOR循环开始时,游标会自动打开(不需要使用OPEN方法);每循环一次系统自动读取游标当前行的数据(不需要使用FETCH);当数据遍历完毕退出FOR循环时,游标被自动关闭(不需要使用CLOSE),大大降低了应用程序的复杂度。游标隐式游标FOR循环

语法:FOR<cursor_record>IN(<查询语句>)

LOOP

<执行部分>

ENDLOOP;

其中,<cursor_record>是一个记录类型的变量。它是DMSQL程序根据SQL%ROWTYPE属性隐式声明出来的,不需要显式声明。也不能显式声明一个与<cursor_record>同名的记录,会导致逻辑错误。游标显式游标FOR循环

语法:FOR<cursor_record>IN<游标名>

LOOP

<执行部分>

ENDLOOP;

其中,显式游标FOR循环与隐式游标的语法和使用方式都非常相似,只是关键字“IN”后不指定查询语句而是指定显式游标名,<cursor_record>则为<游标名>%ROWTYPE类型的变量。03PARTTHREE游标

隐式游标显式游标游标FOR循环游标变量引用游标游标游标

变量

游标变量不是真正的游标对象,而是指向游标对象的一个指针,因此是一种引用类型,也可以称为引用游标。

使用游标变量的步骤:

(1)定义游标变量;

(2)游标变量赋值;

(3)打开游标;

(4)拨动游标和关闭游标。游标与常规的游标相比,游标变量具有以下特性:

(1)游标变量不局限于一个查询,可以为一个查询声明或者打开一个游标变量,然后对其结果集进行处理,之后又可以将这个游标变量为其它的查询打开;

(2)可以对游标变量进行赋值;

(3)可以像用一个变量一样在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论