数据库基础与实例教程(达梦DM8) 课件 6.1掌握数据类型与操作符_第1页
数据库基础与实例教程(达梦DM8) 课件 6.1掌握数据类型与操作符_第2页
数据库基础与实例教程(达梦DM8) 课件 6.1掌握数据类型与操作符_第3页
数据库基础与实例教程(达梦DM8) 课件 6.1掌握数据类型与操作符_第4页
数据库基础与实例教程(达梦DM8) 课件 6.1掌握数据类型与操作符_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

数据库基础(基于达梦DM8)数据库程序设计66.1掌握数据类型和操作符0102记录类型%TYPE和%ROWTYPE03数组类型04集合类型05操作符6.1.1%TYPE和%ROWTYPE

在许多时候,DMSQL程序变量被用来处理存储在数据库表中的数据。这种情况下,变量应该拥有与表列相同的类型。如果用户应用中有很多的变量以及DMSQL程序代码,这种处理可能是十分耗时和容易出错的。为了解决上述问题,DMSQL程序提供了%TYPE数据类型和%ROWTYPE数据类型。%TYPE可以将变量同表列的类型进行绑定。与%TYPE类似,%ROWTYPE将返回一个基于表定义的运算类型,它将一个记录声明为具有相同类型的数据库行。在DMSQL程序设计中使用%TYPE和%ROWTYPE是一种非常好的编程风格,它使得DMSQL程序更加灵活,更适应于对数据库的处理。6.1.1%TYPE和%ROWTYPE

定义%TYPE变量的语法片段:DECLAREV_NAMET.NAME%TYPE;BEGIN......END;/6.1.1%TYPE和%ROWTYPE

【案例6-1】设置一个与职工表姓名字段类型一致的变量V_NAME,将职工号3001职工的姓名记录在V_NAME中并输出。在输出的V_NAME变量内容前增加提示语“所查找的职工姓名为:”。DECLARE

V_NAMESCH_FACTORY.STAFF.姓名%TYPE;BEGIN

SELECT姓名INTOV_NAMEFROMSCH_FACTORY.STAFFWHERE职工号=3001;

PRINT('所查找的职工姓名为:'||V_NAME);END;/6.1.1%TYPE和%ROWTYPE

定义%ROWTYPE变量的语法片段:DECLAREV_TRECT%ROWTYPE;BEGIN......END;/6.1.1%TYPE和%ROWTYPE

【案例6-2】设置一个与职工表数据行字段类型一致的变量V_NAME,将职工号3001职工的信息记录在V_NAME中并输出其“姓名”和“年龄”。在输出的V_NAME变量内容前分别增加提示语“所查找的职工姓名为:”和“所查找的职工年龄为:”。DECLAREV_NAMESCH_FACTORY.STAFF%ROWTYPE;BEGINSELECT*INTOV_NAMEFROMSCH_FACTORY.STAFFWHERE职工号=3001;PRINT('所查找的职工姓名为:'||V_NAME.姓名);PRINT('所查找的职工年龄为:'||V_NAME.年龄);END;/6.1.2记录类型记录类型是由单行多列的标量类型构成复合类型,类似于C语言中的结构。记录类型提供了处理独立但又作为一个整体单元的相关变量的一种机制。定义记录类型的语法如下所示:TYPE<记录类型名>ISRECORD(<字段名><数据类型>[<default子句>]{,<字段名><数据类型>[<default子句>]});6.1.2记录类型default子句的相关说明如下所示:<default子句>::=<default子句1>|<default子句2><default子句1>::=DEFAULT<缺省值><default子句2>::=:=<缺省值>通过将需要操作的表结构定义成一个记录,可以方便地对表中的行数据进行操作。在DMSQL程序中使用记录,需要先定义一个RECORD类型,再用该类型声明变量,可以单独对记录中的字段赋值,使用点标记引用一个记录中的字段(记录名.字段名)6.1.2记录类型【案例6-3】定义一个记录类型r_staff,包含name和age两个字段,字段类型分别对应SCH_FACTORY模式中的STAFF表中的“姓名”和“年龄”两个字段。声明一个该记录类型的变量v_staff,使用点标记为v_staff的两个字段赋值,然后使用v_staff更新STAFF表的姓名为“张童”的年龄为28。6.1.2记录类型DECLARETYPEr_staffISRECORD(nameSCH_FACTORY.STAFF.姓名%TYPE,ageSCH_FACTORY.STAFF.年龄%TYPE);v_staffr_staff;BEGIN v_:='张童'; v_staff.age:=28; UPDATESCH_FACTORY.STAFFSET年龄=v_staff.ageWHERE姓名=v_; COMMIT;END;/6.1.3数组类型1、静态数组类型2、动态数组类型6.1.3数组类型1、静态数组类型静态数组是在声明时就已经确定了数组大小的数组,其长度是预先定义好的,在整个程序中,一旦给定大小后就无法改变。定义静态数组类型的语法图如图所示:6.1.3数组类型1、静态数组类型定义了静态数组类型后需要用这个类型申明一个数组变量然后进行操作。理论上DM支持静态数组的每一个维度的最大长度为65534,但是静态数组最大长度同时受系统内部堆栈空间大小的限制,如果超出堆栈的空间限制,系统会报错。6.1.3数组类型1、静态数组类型DECLARE

TYPEArrISARRAYVARCHAR[3]; --TYPE定义一维数组类型

AArr;

--声明一维数组

TYPEArr1ISARRAYVARCHAR[2,4]; --TYPE定义二维数组类型

BArr1; --声明二维数组BEGIN

......END;/6.1.3数组类型2、动态数组类型与静态数组不同,动态数组可以随程序需要而重新指定大小,其内存空间是从堆(HEAP)上分配(即动态分配)的,通过执行代码而为其分配存储空间,并由DM自动释放内存。动态数组与静态数组的定义方法类似,区别只在于动态数组没有指定下标,需要动态分配空间。定义动态数组类型的语法图如图所示:6.1.3数组类型2、动态数组类型定义了动态数组类型后需要用这个类型申明一个数组变量,之后在DMSQL程序的执行部分需要为这个数组变量动态分配空间。动态分配空间语法如下所示:数组变量名:=NEW数据类型[常量表达式,…];数组变量名:=NEW数据类型[常量表达式][];--对多维数组的某一维度进行空间分配6.1.3数组类型2、动态数组类型【案例6-4】使用动态数组打印4的1倍、2倍、3倍、4倍的数字。DECLARETYPEArrISARRAYVARCHAR[];aArr;BEGINa:=NEWVARCHAR[4];--动态分配空间FORIIN1..4LOOPa[I]:=I*4;PRINTa[I];ENDLOOP;END;/6.1.4集合类型1、VARRAY类型2、索引表类型3、嵌套表类型6.1.4集合类型1、VARRAY类型VARRAY是一种具有可伸缩性的数组,数组中的每个元素具有相同的数据类型。VARRAY在定义时由用户指定一个最大容量,其元素索引是从1开始的有序数字。定义VARRAY的语法格式如下所示:TYPE<数组名>ISVARRAY(<常量表达式>)OF<数据类型>;6.1.4集合类型1、VARRAY类型在定义了一个VARRAY数组类型后,再声明一个该数组类型的变量,就可以对这个数组变量进行操作了。如下面的代码片段所示:TYPEmy_array_typeISVARRAY(10)OFINTEGER;vMY_ARRAY_TYPE;6.1.4集合类型2、索引表类型索引表提供了一种快速、方便地管理一组相关数据的方法。索引表是一组数据的集合,它将数据按照一定规则组织起来,形成一个可操作的整体,是对大量数据进行有效组织和管理的手段之一,通过函数可以对大量性质相同的数据进行存储、排序、插入及删除等操作,从而可以有效地提高程序开发效率及改善程序的编写方式。索引表不需要用户指定大小,其大小根据用户的操作自动增长。定义索引表的语法格式如下所示:TYPE<索引表名>ISTABLEOF<数据类型>INDEXBY<索引数据类型>;6.1.4集合类型2、索引表类型【案例6-5】定义数据类型为VARCHAR,索引类型为INT的索引表。然后使用该索引表记录1号元素为’TEST1’,2号元素为’TEST2’,3号元素为1号元素和2号元素的组合,最后打印3号元素。6.1.4集合类型2、索引表类型DECLARE

TYPEArrISTABLEOFVARCHAR(100)INDEXBYINT;

xArr;BEGIN

x(1):='TEST1';

x(2):='TEST2';

x(3):=x(1)||x(2);PRINTx(3);END;/6.1.4集合类型3、嵌套表类型嵌套表类似于一维数组,但与数组不同的是,嵌套表不需要指定元素的个数,其大小可自动扩展。嵌套表元素的下标从1开始。定义嵌套表的语法格式如下所示:TYPE<嵌套表名>ISTABLEOF<元素数据类型>;6.1.4集合类型3、嵌套表类型【案例6-6】定义一个嵌套表,其结构与SCH_FACTORY.STAFF表相同,用来存放部门号为100001职工的信息。然后打印第1个元素的“姓名”。6.1.4集合类型3、嵌套表类型DECLARE TYPEInfo_tISTABLEOFSCH_FACTORY.STAFF%ROWTYPE; infoInfo_t;BEGIN SELECT职工号,姓名,性别,年龄,电话号码,籍贯,部门号BULKCOLLECTINTOinfoFROMSCH_FACTORY.STAFFWHERE部门号=100001; PRINT(info(1).姓名);END;/6.1.5操作符1、算术操作符2、关系操作符3、比较操作符4、逻辑操作符6.1.5操作符1、算术操作符操作符对应操作+加-减*乘/除6.1.5操作符2

温馨提示

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

评论

0/150

提交评论