↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4
历史版本PostgreSQL 8.3 已于 2013 年 2 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

32.10. 使用描述符区域 #

SQL 描述符区域是一种处理SELECT、FETCH或 DESCRIBE 语句结果的高级方法。SQL 描述符区域将一行数据及其元数据项组合到一个数据结构中。在执行动态 SQL 语句时,结果列的性质可能无法提前获知,此时元数据特别有用。PostgreSQL 提供两种使用描述符区域的方式:命名 SQL 描述符区域和 C 结构体 SQLDA。

一个命名 SQL 描述符区域由一个头部以及一个或多个条目描述符区域构成,头部包含与整个描述符相关的信息,而条目描述符区域则描述结果行中的每一列。

在使用 SQL 描述符区域之前,需要先分配一个:

EXEC SQL ALLOCATE DESCRIPTOR identifier;

identifier 会作为该描述符区域的“变量名”。当不再需要该描述符时,应当释放它:

EXEC SQL DEALLOCATE DESCRIPTOR identifier;

要使用一个描述符区域,把它指定为INTO子句的存储目标(而不是列出主变量):

EXEC SQL FETCH NEXT FROM mycursor INTO SQL DESCRIPTOR mydesc;

如果结果集为空,该描述符区域仍然会包含查询的元数据,即字段的名称。

那么如何从描述符区域中取得数据呢?你可以把描述符区域当作一个包含命名字段的结构。要从头部取得某个字段的值并存入一个主变量,可使用以下命令:

EXEC SQL GET DESCRIPTOR name :hostvar = field;

目前只定义了一个头部字段:COUNT,它表示存在多少个条目描述符区域(即结果中包含多少列)。主变量需要是整数类型。要从条目描述符区域取得一个字段,可使用以下命令:

EXEC SQL GET DESCRIPTOR name VALUE num :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 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。