南大通用GBase8s 常用SQL语句(五十六)

1.1 CREATE OPAQUE TYPE 语句
使用 CREATE OPAQUE TYPE 语句创建不透明的数据类型。
该语句是 SQL ANSI/ISO 标准的扩展。
语法

元素 描述 限制 语法
length 存储此数据类型值需要的字节数 当 sizeof( ) 伪指令应用于类型结构时返回的正整数 精确数值
type 在这里为新的不透明数据类型声明的名称 在数据库的数据类型名称中必须是唯一 标识符
用法
CREATE OPAQUE TYPE 语句在 sysxtdtypes 系统目录中注册新的不透明数据类型。
如果您包含 IF NOT EXISTS 关键字,如果指定名称的 OPAQUE 数据类型已经在当前数据库中注册过,则数据库服务器不采取任何操作(而非向应用程序发送异常)。
要创建不透明数据类型,必须拥有数据库上的 Resource 权限。当创建不透明数据类型时,只有您,即所有者拥有此新的不透明数据类型上的 Usage 特权。可以使用 GRANT 或 REVOKE 语句向此数据库的其他用户授予或撤销 Usage 权限。
要查看数据类型上的特权,请在 sysxtdtypes 系统目录表中检查所有者的名称,并在 sysxtdtypeauth 系统目录表中检查可能已经授权的附加类型特权。
有关系统目录表的详细信息,请参阅 GBase 8s SQL 参考指南。
DB-Access 实用程序也可显示不透明数据类型上的特权。
为不透明类型声明名称
您为不透明数据类型声明的名称是 SQL 标识符。当在不符合 ANSI 的数据库中创建不透明数据类型时,该名称在数据库中的数据类型名称中必须是唯一的。
当在兼容 ANSI 的数据库中创建不透明数据类型时,owner.type 组合必须在数据库内是唯一的。所有者名称是区分大小写的。如果不在所有者名称上加引号,则不透明类型 owner 的名称将以大写字母存储。
INTERNALLENGTH 修饰符
INTERNALLENGTH 修饰符指定作为固定长度或者变化长度的不透明数据类型所需的存储大小。
固定长度不透明类型
固定长度不透明类型有固定大小的内部结构。要创建 固定长度不透明类型,请为 INTERNALLENGTH 修饰符指定内部结构的大小(按字节)。下一示例创建称为 fixlen_typ 的固定长度不透明类型,并分配 8 个字节存储此数据类型。
CREATE OPAQUE TYPE fixlen_typ(INTERNALLENGTH=8, CANNOTHASH)
可变长度的不透明类型
可变长度的不透明类型有一个内部结构,其大小可能从一个值变化成另一个值。例如,不透明数据类型的此内部结构可能最多保存某确定大小的字符串的实际值,但是超出此大小时它肯使用 CLOB 的 LO 指针保存该值。
要创建可变长度的不透明数据类型,将 VARIABLE 关键字与 INTERNALLENGTH 修饰符一起使用。以下语句创建称为 varlen_typ 的可变长度不透明数据类型:
CREATE OPAQUE TYPE varlen_typ
(INTERNALLENGTH=VARIABLE, MAXLEN=1024)
不透明类型修饰符
Opaque-Type 修饰符

元素 描述 限制 语法
align_value 依照其对齐传递给用户定义的例程的不透明数据类型的字节边界。缺省值为 4 字节。 必须为 1 、2 、4 或 8,者取决于不透明数据类型的 C 定义以及用以构建该数据类型的对象文件的硬件和编译器 精确数值
length 为可变长度不透明类型的示例分配的最大长度。缺省为 2 千字节。 必须为正整数 ≤ 32 KB。请勿为固定长度数据类型指定。超过此长度的值会返回错误 精确数值
修饰符可以为不透明数据类型指定以下可选信息:
MAXLEN 为可变长度类型指定最大长度。
CANNOTHASH 指定数据库服务器不能对不透明类型使用内置散列函数。
ALIGNMENT 指定数据库服务器对齐不透明类型所依据的字节边界。
PASSEDBYVALUE 指定需要 4 字节或更少字节存储的不透明类型由值传递。
缺省情况下,不透明类型按引用传递至用户定义的例程。
定义不透明类型
要定义数据库服务器新的不透明数据类型,必须通过以下 C 或 Java™ 语言中的信息:
作为不透明数据类型的内部存储器的数据结构A
该类型的内部存储器详细信息已隐藏或不透明。一旦定义了新的不透明数据类型。数据库服务器就可以操纵该类型,而无需了解存储它的 C 或 Java 结构的知识。
允许数据库服务器与此内部结构相互作用的支持函数。
支持函数告诉数据库服务器如何与该数据类型的内部结构相互作用。这些支持函数必须以 C 或 Java 变成语言编写。
其它支持函数或最终用户可以调用从而在不透明类型上运行的附加用户定义的函数(可选)
可能的支持函数包括操作员函数和强制转型函数。在 SQL 语句中能够使用这些函数之前,必须使用适当的 CREATE CAST 、CREATE PROCEDURE 或 CREATE FUNCTION 语句注册这些函数。
下表总结不透明数据类型的支持函数。
函数 描述 调用
input( ) 将不透明类型从其外部 LVARCHAR 表示转换为内部表示 当客户端应用程序将不透明类型的字符表示发送至 INSERT 、UPDATE 或 LOAD 语句中时
output( ) 将不透明类型从其内部表示转换为其外部 LVARCHAR 表示 当数据库服务器将不透明类型的字符表示作为 SELECT 或 FETCH 语句的结果发送时
receive( ) 将不透明类型从其在客户端计算机上的内部表示转换为其在服务器计算机上的内部表示。不管客户端和服务器计算机类型之间的区别而提供独立于平台的结果 当客户端应用程序将不透明类型的内部表示发送至 INSERT 、UPDATE 或 LOAD 语句中时
send( ) 将不透明类型从其在服务器计算机上的内部表示转换为其在客户端计算机上的内部表示。不管客户端和服务器计算机类型之间的区别而提供独立于平台的结果 当数据库服务器将不透明类型的内部表示作为 SELECT 或 FETCH 语句的结果发送时
db_receive( ) 将不透明类型从其在本地数据库上的内部表示转换为传送到本地服务器上外部数据库的 dbsendrecv 类型 当本地数据库从本地数据库服务器上的外部数据库接收到 dbsendrecv 类型时
db_send( ) 将不透明类型从其在本地数据库上的内部表示转换为传送到本地服务器上外部数据库的 dbsendrecv 类型 当本地数据库将 dbsendrecv 类型发送至本地数据库服务器上的外部数据库时
server_receive( ) 将不透明类型从其在本地服务器计算机上的内部表示转换为传送到远程数据库服务器的 srvsendrecv 类型。为此函数使用任意名称 当本地数据库服务器从远程数据库服务器接收到 srvsendrecv 类型时
server_send( ) 将不透明类型从其在本地服务器计算机上的内部表示转换为传送到远程数据库服务器的 srvsendrecv 类型。为此函数使用任意名称 当本地数据库服务器将 srvsendrecv 类型发送到远程数据库服务器时
import( ) 执行从不透明类型的外部(字符)表示转换为批量复制的内部格式所需的所有任务 当 DB-Access(LOAD)启动从文本文件到数据库的批量复制时
export ( ) 执行从不透明类型的内部表示转换为批量复制的外部(字符)格式所需的所有任务 当 DB-Access(UNLOAD)或 High Performance Loader 启动从文本文件到数据库的批量复制时
importbinary( ) 执行从客户端服务器上不透明类型的内部表示转换为批量复制在服务器计算机上的内部表示所需的所有任务 当 DB-Access(LOAD)或 High Performance Loader 启动从二进制文件到数据库的批量复制时
exportbinary( ) 执行从服务器计算机上不透明类型的内部表示转换为批量复制在客户端计算机上的内部表示所需的所有任务 当 DB-Access(LOAD)或 High Performance Loader 启动从数据库到二进制文件的批量复制时
assign( ) 在将不透明类型存储到磁盘前执行所有必需的处理。此支持函数必须命名为 assign( ) 当数据库服务器将不透明存储到磁盘前执行 INSERT 、UPDATE 或 LOAD 时
destroy( ) 在除去包含不透明类型的行之前执行所有必需的处理。此支持函数必须命名为 destroy( ) 当数据库服务器从磁盘除去不透明类型前执行 DELETE 或 DROP TABLE 时
lohandles( ) 返回不透明类型的 LO 指针结构(智能大对象的指针) 的列表 当数据库服务器必须在不透明类型中搜索智能大对象的引用时;当 oncheck 运行时或执行归档时
compare( ) 比较两个不透明类型的值并返回整数值以指示第一个值是小于、等于还是大于第二个值 当数据库服务器在 SELECT 语句中遇到 ORDER BY 、UNIQUE 、 DISTINCT 或 UNION 子句时,或当 CREATE INDEX 创建 B-tree 索引时
在为不透明类型编写了必要的支持函数后,使用 CREATE FUNCTION 语句在与不透明类型相同的数据库中注册这些支持函数。某些支持函数将其它数据类型转换为新的不透明类型或从新的不透明类型转换为其它数据类型。在创建并注册这些支持函数后,使用 CREATE CAST 语句将每个函数与特殊的强制转型相关联。强制转型必须注册在与支持函数相同的数据库中。
在已经编写了必要的 C 语言或 Java 语言源代码以定义不透明数据类型后,可随后使用 CREATE OPAQUE TYPE 语句在数据库中注册不透明数据类型。

你可能感兴趣的:(sql,数据库,database)