![达梦数据库编程指南](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=1738885781-SmoCEQJcUK7FnXmyzT5EhjZFWsqzYMex-0-a1a9354ae0b14dac715c153e4da86816)
【例2-7】数组类型定义举例。
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_23.jpg?sign=1738885781-0m2kdXgaakHzSTrIpi19lBbNbWWZW5vT-0-ce4aca4dcb6df9834eb500828b795b44)
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_24.jpg?sign=1738885781-YbLM7YOKH84JXOe7J3sdwpzZpt0GqKqN-0-a5d9ed746464a21c0eb3f692c3861e4e)
2.动态数组
动态数组与静态数组的用法类似,区别只在于动态数组没有指定下标,需要动态分配空间。动态数组的语法格式如下:
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_25.jpg?sign=1738885781-Wooa2NCWaYJvpauqneZFRWyOme4WlNe6-0-ec2dc7de9cfacc8ba1198d29f693ae46)
多维动态数组分配空间的语法格式如下:
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_26.jpg?sign=1738885781-OeMcv9f4VBNU3fRqdqGvBpnPIi7GS7V6-0-3e359e0a0d94cf218a30b9e67f1c1f7e)
另外,可以使用如下两种语法格式对多维数组的某一维度进行空间分配。其中,第二种语法格式使用自定义类型来创建动态数组,前提是先定义好一个类型,该语法格式适用于含有精度或长度的数据类型。
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_27.jpg?sign=1738885781-Km6TitT1ji0VEvKOleFfuthUuTwIMmAE-0-6692d992493011e6a7a26fc5d17d0f7a)
【例2-8】动态数组使用举例。
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_28.jpg?sign=1738885781-FIEiHb634jNKUnEWlQkyPO12WgfLVprZ-0-5e76f43ae69543eea41e1d8aa281be45)
【例2-9】使用自定义类型定义动态数组举例。
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_29.jpg?sign=1738885781-e90xcRLaHdNEeCvGAqu7C9WKVIvQToBm-0-43213a980999d2eb6feda3be195c5e86)
【例2-10】多维动态数组举例。
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_30.jpg?sign=1738885781-UT6PWWsRqImzejtXuOoensHOMoPf9XE9-0-3c46f0b51833d7720774603eea5cc35b)
DM还支持索引数组,如例2-11所示。
【例2-11】索引数组举例。
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_31.jpg?sign=1738885781-SmafltZXhSw57MgROiBtLBUrQmZlDlYj-0-92b94fa5877c0bd3caf4baed51c08cbe)
在DM中,可以利用查询语句查询数组信息。语法格式如下:
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_32.jpg?sign=1738885781-Y9GKg5Ke2g5nThFS4A7NE8Dj02RWsvQK-0-138ad7e7614791bc04ff633789d605ba)
目前,DM只支持一维数组的查询。数组类型可以是记录类型或普通数据库类型。记录类型数组查询出来的列名为记录类型的每个属性名称。普通数据库类型数组查询出来的列名均为“C”。
【例2-12】数组与表的连接查询举例。
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_33.jpg?sign=1738885781-Q34OT45fpQB2tm1fhJvC45jkBdTD9E50-0-0c12c5ea7199409b1170a9d88183737f)
返回结果如下:
![img](https://epubservercos.yuewen.com/B7CF68/23020642809743806/epubprivate/OEBPS/Images/txt002_34.jpg?sign=1738885781-XRFtadVisf6Igl3VpuSE7uqqbQumn1vA-0-fb9e68aa66ffe71f9f9a9981e864db2e)