CREATE TYPE(游标)语句
CREATE TYPE(游标)语句定义用户定义的游标类型。
调用
此语句可嵌入应用程序中或者以交互方式发出。 它是可动态准备的可执行语句。
权限
语句授权标识所拥有的特权必须至少包括下列其中一项权限:
- 数据库的 IMPLICIT_SCHEMA 权限(如果游标类型的模式名不是指现有模式)
- 模式的 CREATEIN 特权(如果游标类型的模式名是指现有模式)
- 模式上的 SCHEMAADM 权限(如果游标类型的模式名是指现有模式)
- DBADM 权限
语法
描述
- OR REPLACE
- 指定替换当前服务器上存在的数据类型的定义。 在目录中替换新定义之前,有效删除现有定义,但当函数和方法具有参数或使用要替换的数据类型定义的返回值时,这些函数和方法将失效。 现有定义不能是结构化类型 (SQLSTATE 42809)。 如果数据类型的定义在当前服务器上不存在,那么忽略此选项。
- 类型名称
命名类型。 该名称(包括隐式或显式限定符)不得标识当前服务器上已存在的任何其他类型(内置或用户定义)。 不限定的名称不能与内置数据类型或 BOOLEAN、BINARY 或 VARBINARY (SQLSTATE 42918) 的名称相同。
在谓词中用作关键字的一些名称保留供系统使用,不能用作类型名 (SQLSTATE 42939)。 名称包含 SOME、ANY、ALL、NOT、AND、OR、BETWEEN、NULL、LIKE、EXISTS、IN、UNIQUE、OVERLAPS、SIMILAR、MATCH 和比较运算符。 如果指定了两部分类型名称,那么模式名称不得以字符“SYS”开头 (SQLSTATE 42939)。
- anchored-row-data-type
- 标识另一个对象中用于确定与游标类型相关联的行类型的行信息。 锚点对象的数据类型具有适用于创建行类型的相同限制。
- ANCHOR DATA TYPE TO
- 指示使用锚定数据类型来指定数据类型。
- variable-name
- 标识全局变量。 被引用变量的数据类型必须是行类型,并用作与游标类型相关联的行类型。
- ROW OF table-name 或 view-name
- 根据 table-name 标识的表的列名和列数据类型或 view-name标识的视图,指定具有名称和数据类型的字段行。 锚点对象列的数据类型具有应用于字段数据类型的相同限制。 与游标类型相关联的行类型是未命名的行类型。
- ROW OF 游标变量名
- 指定名称和数据类型的字段,这些字段基于 cursor-variable-name 标识的游标变量的字段名和字段数据类型。 指定的游标变量必须是下列其中一个对象 (SQLSTATE 428HS):
- 具有强类型游标数据类型的全局变量
- 具有弱类型游标数据类型的全局变量,该数据类型是通过使用 CONSTANT 子句指定已命名所有结果列的 select-statement 来创建或声明。
- row-type-name
- 指定将用于检查分配给游标类型的变量的 select-statement 结果表的行类型。 如果类型检查失败,那么分配失败 (SQLSTATE 42821)。 如果指定了 row-type-name 而没有指定模式名,那么通过在 SQL 路径中搜索模式来解析行类型。
规则
- 使用锚定数据类型:锚定数据类型不能引用以下对象 (SQLSTATE 428HS):昵称、类型化表、类型化视图、与基于表达式的索引关联的统计视图、声明的临时表、与弱类型游标关联的行定义、具有与数据库代码页或数据库排序规则不同的代码页或排序规则的对象。
注意
- 游标类型用法: 游标类型只能用作以下数据类型:
- 复合 SQL(编译型)语句中的局部变量
- SQL 例程的参数
- SQL 函数的返回类型
- 全局变量
- 游标类型的变量或参数已定义只能在复合 SQL(编译型)语句中使用
- 不得使用具有强类型游标类型的变量或参数来分配基于 statement-name 而不是 select-statement 的游标值
- 具有关联行类型的用户定义游标类型是强类型游标类型;否则,它是弱类型游标类型。
示例
- 示例 1: 创建可与任何游标配合使用的游标类型。
CREATE TYPE EMPCURSOR AS CURSOR - 示例 2: 创建基于行数据类型
DEPTROW的强类型游标类型:CREATE TYPE DEPTCURSOR AS DEPTROW CURSOR
