pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
SQL 描述符区域是一种处理SELECT或FETCH语句结果的高级方法。SQL 描述符区域将一行数据及其元数据项组合到一个数据结构中。在执行动态 SQL 语句时,结果列的性质可能无法提前获知,此时元数据特别有用。
一个 SQL 描述符区域由一个头部以及一个或多个条目描述符区域构成,头部包含与整个描述符相关的信息,而条目描述符区域则描述结果行中的每一列。
在使用 SQL 描述符区域之前,需要先分配一个:
EXEC SQL ALLOCATE DESCRIPTOR identifier;
identifier 会作为该描述符区域的“变量名”。当不再需要该描述符时,应当释放它:
EXEC SQL DEALLOCATE DESCRIPTOR identifier;
要使用一个描述符区域,把它指定为INTO子句的存储目标(而不是列出主变量):
EXEC SQL FETCH NEXT FROM mycursor INTO DESCRIPTOR mydesc;
那么如何从描述符区域中取得数据呢?你可以把描述符区域当作一个包含命名字段的结构。要从头部取得某个字段的值并存入一个主变量,可使用以下命令:
EXEC SQL GET DESCRIPTORname:hostvar=field;
目前只定义了一个头部字段:COUNT,它表示存在多少个条目描述符区域(即结果中包含多少列)。主变量需要是整数类型。要从条目描述符区域取得一个字段,可使用以下命令:
EXEC SQL GET DESCRIPTORnameVALUEnum:hostvar=field;
num可以是一个整数字面量或者一个包含整数的宿主变量。可能的字段有:
CARDINALITY (integer)结果集中的行数
DATA实际的数据项(因此,这个字段的数据类型取决于查询)
DATETIME_INTERVAL_CODE (integer)?
DATETIME_INTERVAL_PRECISION (integer)没有实现
INDICATOR (integer)指示符(表示一个空值或者一个值截断)
KEY_MEMBER (integer)没有实现
LENGTH (integer)以字符计的数据长度
NAME (string)列名
NULLABLE (integer)没有实现
OCTET_LENGTH (integer)以字节计的数据字符表示的长度
PRECISION (integer)精度(用于类型numeric)
RETURNED_LENGTH (integer)以字符计的数据长度
RETURNED_OCTET_LENGTH (integer)以字节计的数据字符表示的长度
SCALE (integer)小数位数(用于类型 numeric)
TYPE (integer)列的数据类型的数字编码
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。