![达梦数据库编程指南](https://wfqqreader-1252317822.image.myqcloud.com/cover/136/43738136/b_43738136.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.5.6 数组类型
数组类型包括静态数组和动态数组两类。静态数组是在声明时已经确定数组大小的数组,其长度是预先定义好的,在整个程序中,一旦大小给定后就无法改变。而动态数组则不然,它可以随程序需要而重新指定数组大小。动态数组的内存空间是从堆(Heap)上分配(动态分配)的,通过执行代码为其分配存储空间。当程序执行到这些语句时,才为其分配,程序员自己负责释放内存。需要注意的是,DM中数组下标的起始值为1。理论上DM支持的静态数组每个维度的最大长度为65534B,动态数组每个维度的最大长度为2147483646B,但是数组最大长度同时受系统内部堆栈(静态数组)和堆(动态数组)空间大小的限制。如果超出堆栈/堆的空间限制,系统就会报错。
1.静态数组
静态数组的语法格式如下:
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_22.jpg?sign=1738868487-HbYEdE6x4xxLL1O8gjbqEmBhRTSq4VFS-0-435d1bd96cd985b0180b172f966dd4f5)
【例2-7】数组类型定义举例。
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_23.jpg?sign=1738868487-i5Vz0f98c4E3Xc22q1HBao19sdp0KloG-0-2f8e92cbbe640ca5dcd976c28c614e81)
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_24.jpg?sign=1738868487-RytHiTyEMhXCTQlnk38u35LmBW8TT5n9-0-ab332c5150c87d0b6b54bf33359cda13)
2.动态数组
动态数组与静态数组的用法类似,区别只在于动态数组没有指定下标,需要动态分配空间。动态数组的语法格式如下:
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_25.jpg?sign=1738868487-ReAFWCyzbf0iiwK6tyjNFtN50XDJuFzk-0-b9371c2e4c768d3210c4d00616885b3e)
多维动态数组分配空间的语法格式如下:
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_26.jpg?sign=1738868487-d3Q5VsPkXuf9BRMPuqwod8HPQwYf5cuh-0-b32e57803bd069314f0314043fcf7e7a)
另外,可以使用如下两种语法格式对多维数组的某一维度进行空间分配。其中,第二种语法格式使用自定义类型来创建动态数组,前提是先定义好一个类型,该语法格式适用于含有精度或长度的数据类型。
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_27.jpg?sign=1738868487-pDIXg1NjgOuDnQBN38lERorqCzNOesba-0-bf0aee233617e391171134fbeedfa3cb)
【例2-8】动态数组使用举例。
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_28.jpg?sign=1738868487-zZehxZlmBBj8K4FyYd8ELrfiTQbjE0Yw-0-b64cf5806f06e35976fc16145cd0ec10)
【例2-9】使用自定义类型定义动态数组举例。
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_29.jpg?sign=1738868487-SqJO6MsNnroHv3BmlDtuWmDmvPTRkP0F-0-8aa4738382192491429433a07c951e4a)
【例2-10】多维动态数组举例。
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_30.jpg?sign=1738868487-nKvb4hT1NwJ24LIPCU1MvOGPjpaR1uf8-0-5c64f8efd4948255ec640af2e5b76b56)
DM还支持索引数组,如例2-11所示。
【例2-11】索引数组举例。
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_31.jpg?sign=1738868487-q1jWSEE3PTzvpISRud6EY4j47pbdfeX8-0-64de6ea8ce7faf2c50d8aac930c81329)
在DM中,可以利用查询语句查询数组信息。语法格式如下:
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_32.jpg?sign=1738868487-j3HKg4luPi5vhWhynm9QYsG8ByfcJxhe-0-a74e0e7128e6e65205425d8bed034c5d)
目前,DM只支持一维数组的查询。数组类型可以是记录类型或普通数据库类型。记录类型数组查询出来的列名为记录类型的每个属性名称。普通数据库类型数组查询出来的列名均为“C”。
【例2-12】数组与表的连接查询举例。
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_33.jpg?sign=1738868487-letUgXoCtZjP2ncbrbdycvT1DrudauAA-0-25137e7c1bde4999a42ca8a6bda74588)
返回结果如下:
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_34.jpg?sign=1738868487-cJKFvQididg0B5zL6mfKJ27G2PahnWqV-0-daaa7a3d3565934abc4986ef84921a1e)