广告
返回顶部
首页 > 资讯 > 数据库 >DM自定义数据类型
  • 543
分享到

DM自定义数据类型

2024-04-02 19:04:59 543人浏览 泡泡鱼
摘要

自定义类型 用户使用CREATE TYPE语句可以定义记录类型、对象类型、命名的数组类型、集合类型等,如果在对象类型中声明了过程或方法,可以使用CREATE TYPE BODY定义这些过程和方法。 创建类型

自定义类型
用户使用CREATE TYPE语句可以定义记录类型、对象类型、命名的数组类型、集合类型等,如果在对象类型中声明了过程或方法,可以使用CREATE TYPE BODY定义这些过程和方法。

创建类型可以使用CREATE TYPE语句创建记录类型、对象类型、数组和集合类型。
语法格式
CREATE [OR REPLACE] TYPE [< 模式名>.]< 类型名>[WITH ENCRYPTioN] [< 调用权限子句>] AS|IS < 记录类型定义子句>|< 对象类型定义子句>
|< 数组类型定义子句>|< 集合类型定义子句>
[< 调用权限子句>]::= AUTHID DEFINER
| AUTHID CURRENT_USER
< 对象类型定义子句> ::= OBJECT [UNDER [< 模式名>.]< 父类型名>] (< 对象定义>,{< 对象定义>})[[NOT] FINAL] [[NOT] INSTANTIABLE]
< 对象定义> ::= < 变量列表定义>|< 过程声明>|< 函数声明>|< 构造函数声明>
< 过程声明> ::= [< 方法继承属性>][STATIC|MEMBER] PROCEDURE < 过程名> < 参数列表>
< 函数声明> ::= [< 方法继承属性>][MAP] [STATIC|MEMBER] FUNCTION < 函数名> < 参数列表> RETURN < 返回值数据类型>[DETERMINISTIC]
[PIPELINED]
< 方法继承属性> ::= < 重载属性> | | < 重载属性>
< 重载属性> ::= [NOT] OVERRDING
::= FINAL | NOT FINAL | INSTANTIABLE | NOT INSTANTIABLE
< 构造函数声明> ::= CONSTRUCTOR FUNCTION < 函数名> < 参数列表> RETURN SELF AS RESULT
< 记录类型定义子句> ::= RECORD(变量列表定义)
< 数组类型定义子句> ::= ARRAY < 数据类型>' [' [< 常量表达式>]{,[< 常量表达式>]}']'
< 集合类型定义子句> ::= < 数组集合定义子句>|< 嵌套表定义子句>|< 索引表定义子句>
< 数组集合定义子句> ::= VARRAY(< 常量表达式>) OF < 数据类型>
< 嵌套表定义子句> ::= TABLE OF < 数据类型>
< 索引表定义子句> ::= TABLE OF < 数据类型> [INDEX BY < 数据类型>]

使用说明
1. 对象类型中过程和函数的声明都是前向声明,类型定义中不包括任何实现代码;达梦系统中对象类型与类是等价的。
2. 对象类型中过程和函数可以声明为STATIC类型,表明为静态过程或函数;也可以声明为MEMBER,表明为成员过程或函数,非STATIC且非构造函数的方法缺省为成员方法。MAP表示将对象类型的实例映射为标量数值,只能用于成员函数;
3. 关于对象类型的继承,参考12.1节中类继承的相关说明;
4. WITH ENCRYPTION 选项,指定是否对自定义类型定义进行加密;
5. 记录类型的定义格式与对象类型类似,但记录类型中不能有过程和函数声明;
6. 在< 数组类型定义子句>的数组长度定义的[]内添加’,’可以定义多维数组。若指定了常量表达式,则定义的是静态数组,其数组长度是固定的。若没有指定常量表达式,则定义的是动态数组,其数组长度是在使用时指定。理论上DM支持静态数组的每一个维度的最大长度为65534,动态数组的每一个维度的最大长度为2147483646,但是数组最大长度同时受系统内部空间大小的限制,如果超出堆栈/堆的空间限制,系统会报错。
7. 数组集合类型中的常量表达式定义了其最大容量,其数组元素数据类型可以是基础类型,也可以是自定义数据类型。
8. 嵌套表类型和索引表类型没有元素个数限制,元素数据类型可以是基础数据类型也可以是其它自定义类型或是对象、记录、静态数组,但是不能是动态数组;第二个则是索引表的下标类型,目前仅支持INTEGER/INT和VARCHAR两种类型,分别代表整数下标和字符串下标。对于VARCHAR类型,长度不能超过1024。

所需权限
1. 使用该语句的用户必须是DBA或具有CREATE TYPE数据库权限的用户。
2.可以用关键字AUTHID DEFINER |AUTHID CURRENT_USER指定自定义类型的调用者权限,若为DEFINER,则采用自定义类型定义者权限,若为CURRENT_USER则为当前用户权限,默认为定义者权限。

创建类型体对于对象类型中声明的过程和函数,在类型体中进行实现。
语法格式
CREATE [OR REPLACE] TYPE BODY [< 模式名>.]< 类型名>[WITH ENCRYPTION] AS|IS < 对象类型体定义子句> END
< 对象类型体定义子句>::= < 对象类型体定义>,{< 对象类型体定义>}
< 对象类型体定义>::= < 过程实现>|< 函数实现>|< 构造函数实现>
< 过程实现> ::= [< 方法继承属性>][STATIC|MEMBER] PROCEDURE < 过程名> < 参数列表> AS|IS BEGIN < 实现体> END [过程名]
< 函数实现> ::= [< 方法继承属性>][MAP] [STATIC|MEMBER] FUNCTION < 函数名>< 参数列表> RETURN < 返回值数据类型>[DETERMINISTIC]
[PIPELINED] AS|IS BEGIN < 实现体> END [函数名]
< 方法继承属性> ::= < 重载属性> | | < 重载属性>
< 重载属性> ::= [NOT] OVERRDING
::= FINAL | NOT FINAL | INSTANTIABLE | NOT INSTANTIABLE
< 构造函数实现> ::= CONSTRUCTOR FUNCTION < 函数名> < 参数列表> RETURN SELF AS RESULT AS|IS BEGIN < 实现体> END [函数名]

使用说明
1. 对象类型体中的过程、函数定义必须和类型定义中的前向声明完全相同。包括过程的名字、参数定义列表的参数名和数据类型定义;

所需权限
使用该语句的用户必须是DBA或该类型对象的拥有者且具有CREATE TYPE数据库权限的用户。

重编译类型
重新对类型进行编译,如果重新编译失败,则将类型置为禁止状态。
重编功能主要用于检验类型的正确性。
语法格式
ALTER TYPE [< 模式名>.]< 类型名> COMPILE [DEBUG];
参数
1.< 模式名> 指明被重编译的类型所属的模式;
2.< 类型名> 指明被重编译的类型的名字;
3.[DEBUG] 可忽略。

所需权限
执行该操作的用户必须是类型的创建者,或者具有DBA权限。

删除类型
类型的删除分为类型删除和类型体的删除。对于拥有类型体的对象类型,删除类型会将类型体一起删除;删除类型体的话,类型本身依然存在。

删除类型使用DROP TYPE完成类型的删除。对于拥有类型体的对象类型,删除类型会将类型体一起删除。
语法格式
DROP TYPE [< 模式名>.]< 类型名>[RESTRICT | CASCADE];
使用说明
1.如果被删除的类型不属于当前模式,必须在语句中指明模式名;
2.如果一个拥有类型体的对象类型被删除,那么对应的类型体被自动删除。

所需权限
执行该操作的用户必须是该类型的拥有者,或者具有DBA权限。

删除类型体
使用DROP TYPE BODY删除一个对象类型的类型体。
语法格式
DROP TYPE BODY [< 模式名>.]< 类型名>[RESTRICT | CASCADE]; 使用说明
如果被删除的类型体不属于当前模式,必须在语句中指明模式名。

所需权限
执行该操作的用户必须是该类型的拥有者,或者具有DBA权限。

自定义类型的使用
使用规则
1. 对象类型与类等价,类的使用规则可详见第12章《类类型》;
2. 创建的记录类型、数组类型和集合类型,可以直接在DMsql程序语句块中使用,不必在语句块中声明类型,使用方式可参见10.1.1节部分;

3. 用户自定义数据类型可以作为其他用户自定义数据类型的元素类型或成员变量类型;
4. 只有对象类型可以直接作为表中列的数据类型;其他类型只能作为对象类型中成员变量的类型或类型中嵌套使用的数据类型。但含有索引表类型和游标类型的对象类型也不能作为表中列的数据类型。

应用实例
创建一个用来表示复数的对象类型,有实数部分和虚数部分,并实现了复数的加与减的操作。

SQL> CREATE TYPE COMPLEX AS OBJECT(
2     RPART REAL,
3     IPART REAL,
4     FUNCTION PLUS(X COMPLEX) RETURN COMPLEX,
5     FUNCTION LES(X COMPLEX) RETURN COMPLEX
6   );
7   /
executed successfully
used time: 53.553(ms). Execute id is 128
SQL> CREATE TYPE BODY COMPLEX AS
2     FUNCTION PLUS(X COMPLEX) RETURN COMPLEX IS
3     BEGIN
4      RETURN COMPLEX(RPART+X.RPART, IPART+X.IPART);
5     END;
6     FUNCTION LES(X COMPLEX) RETURN COMPLEX IS
7     BEGIN
8      RETURN COMPLEX(RPART-X.RPART, IPART-X.IPART);
9     END;
10  END;
11  /
executed successfully
used time: 14.330(ms). Execute id is 129.

建立表c_tab,表中的第二列的列类型为complex对象类型。

SQL> CREATE TABLE C_TAB(C1 INT, C2 COMPLEX);
executed successfully
used time: 16.381(ms). Execute id is 130.
SQL> INSERT INTO C_TAB VALUES(1, COMPLEX(2,3));
affect rows 1
used time: 1.508(ms). Execute id is 131.

向表c_tab中插入数据

SQL> INSERT INTO C_TAB VALUES(2, COMPLEX(4,2).PLUS(COMPLEX(2,3)));
affect rows 1
used time: 0.969(ms). Execute id is 132.
SQL> commit;
executed successfully
used time: 10.709(ms). Execute id is 133.
SQL> select * from c_tab;
LINEID     C1          C2
---------- ----------- -------------------
1          1           SYSDBA.COMPLEX(2,3)
2          2           SYSDBA.COMPLEX(6,5)
used time: 1.047(ms). Execute id is 134.
您可能感兴趣的文档:

--结束END--

本文标题: DM自定义数据类型

本文链接: https://www.lsjlt.com/news/46935.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • DM自定义数据类型
    自定义类型 用户使用CREATE TYPE语句可以定义记录类型、对象类型、命名的数组类型、集合类型等,如果在对象类型中声明了过程或方法,可以使用CREATE TYPE BODY定义这些过程和方法。 创建类型...
    99+
    2022-10-18
  • TypeScript如何自定义数据类型
    这篇文章主要介绍“TypeScript如何自定义数据类型”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“TypeScript如何自定义数据类型”文章能帮助大家解决问题。TypeScript 类型系统和...
    99+
    2023-07-04
  • DM类数据类型赞怎么使用
    这篇文章主要讲解了“DM类数据类型赞怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“DM类数据类型赞怎么使用”吧!类类型DM7通过类类型在DMSQL程...
    99+
    2022-10-19
  • TypeScript类型系统自定义数据类型教程示例
    目录TypeScript 类型系统和自定义数据类型什么是类型系统函数类型类型别名可选参数默认参数函数重载接口类型可选属性只读属性接口扩展多重接口声明接口的索引签名用接口描述函数类类型...
    99+
    2022-11-16
    TypeScript自定义数据类型 TypeScript类型系统
  • sql怎么创建自定义数据类型
    在 SQL 中,创建自定义数据类型可以使用 `CREATE TYPE` 语句。以下是一个示例:```sqlCREATE TYPE e...
    99+
    2023-09-25
    sql
  • C++自定义数据类型方法详情
    目录1、typedef声明2、枚举类型enum1、typedef声明 typedef用于给已有的类型一个新的名字,这个新的名字可以是自己定义的, 其语法为: typedef 现有类型...
    99+
    2022-11-13
  • 易语言如何自定义数据类型数组
    在易语言中,可以通过使用结构体来自定义数据类型数组。首先,需要创建一个结构体,定义数组的元素类型和个数。例如,如果想要创建一个包含整...
    99+
    2023-08-17
    易语言
  • VB如何自定义类型参数
    这篇文章主要介绍“VB如何自定义类型参数”,在日常操作中,相信很多人在VB如何自定义类型参数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”VB如何自定义类型参数”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-17
  • mybatis-plus如何配置自定义数据类型TypeHandle
    目录如何配置自定义数据类型TypeHandle1.背景2.举例3.TypeHandle配置自定义TypeHandler的使用笔记类型转换器还可以通过注解配置java类型和jdbc类型...
    99+
    2022-11-12
  • mybatis-plus怎么配置自定义数据类型TypeHandle
    本文小编为大家详细介绍“mybatis-plus怎么配置自定义数据类型TypeHandle”,内容详细,步骤清晰,细节处理妥当,希望这篇“mybatis-plus怎么配置自定义数据类型TypeHandle”文章能帮助大家解决疑惑,下面跟着小...
    99+
    2023-06-26
  • JavaScript如何定义数据类型
    这篇文章主要介绍“JavaScript如何定义数据类型”,在日常操作中,相信很多人在JavaScript如何定义数据类型问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java...
    99+
    2022-10-19
  • Go语言中GORM存取数组/自定义类型数据
    目录GORM存取数组类型数据一、GORM的自定义类型1. Scanner/Valuer接口2. 数组变量3. 测试二、实际生产​总结GORM存取数组类型数据 在GORM不支持数组类型...
    99+
    2023-01-17
    Gorm 数组字段处理 gorm 数组 gorm 自定义类型
  • 怎么在python中利用namedtuple自定义数据类型
    怎么在python中利用namedtuple自定义数据类型?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python可以做什么Python是一种编程语言,内置了许多有效的工...
    99+
    2023-06-14
  • C++中的自定义函数返回类型
    目录C++自定义函数返回类型知识点小结C++函数返回值是自定义类型情况1 返回值是自定义类的非引用类型2 返回值是自定义类的引用类型C++自定义函数返回类型 知识点小结 C++的基本...
    99+
    2022-11-13
    C++自定义函数 自定义函数返回类型 C++函数返回类型
  • Java动态数组Arraylist存放自定义数据类型方式
    目录Java动态数组Arraylist存放自定义数据类型自定义一个动态数组ArrayList,加深对动态数组的理解Java动态数组Arraylist存放自定义数据类型 class...
    99+
    2022-11-12
  • C#如何自定义泛型类
    这篇文章主要为大家展示了“C#如何自定义泛型类”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#如何自定义泛型类”这篇文章吧。Generic是Framework 2.0的新元素,中文名字称之为“...
    99+
    2023-06-18
  • VB.NET中怎么自定义类型
    VB.NET中怎么自定义类型,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。VB.NET自定义类型在VB.NET中称为“structure”(结构),包含有一个或多个不同种类的数...
    99+
    2023-06-17
  • Spring中自定义数据类型转换的方法详解
    目录类型转换服务实现Converter接口实现ConverterFactory接口实现GenericConverter接口环境:Spring5.3.12.RELEASE。 Sprin...
    99+
    2022-11-13
  • java定义了多少个数据类型
    小编给大家分享一下java定义了多少个数据类型,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java 定义了8个简单(或基本)的数据类型:字节型(byte ),短...
    99+
    2023-06-03
  • C#中怎么自定义类型转换函数
    C#中怎么自定义类型转换函数,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。/// <summary>  /// 将字符型...
    99+
    2023-06-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作