华为云用户手册

  • 示例 CREATE PACKAGE示例 --创建测试表tbl_test。 gaussdb=# CREATE TABLE tbl_test(uid varchar(6) PRIMARY KEY, area_id varchar(5), level int); --创建包头。 gaussdb=# CREATE OR REPLACE PACKAGE pkg_test AS --公有存储过程可以被外部调用。 PROCEDURE proc_ist_tbl_test(v_uid in varchar, v_area_id varchar, v_level int); PROCEDURE proc_del_tbl_test(v_uid in varchar); PROCEDURE proc_upd_tbl_test(v_uid in varchar, v_area_id varchar, v_level int); END pkg_test; / --创建包体。 gaussdb=# CREATE OR REPLACE PACKAGE BODY pkg_test AS PROCEDURE proc_ist_tbl_test(v_uid in varchar, v_area_id varchar, v_level int) AS BEGIN INSERT INTO tbl_test VALUES (v_uid, v_area_id, v_level); END; PROCEDURE proc_del_tbl_test(v_uid in varchar) AS BEGIN DELETE FROM tbl_test WHERE uid = v_uid; END; PROCEDURE proc_upd_tbl_test(v_uid in varchar, v_area_id varchar, v_level int) AS BEGIN UPDATE tbl_test SET area_id = v_area_id, level = v_level WHERE uid = v_uid; END; var4 int := 10; --实例化开始。 BEGIN var4 := 10; dbe_output.print_line(var4); END pkg_test; / 调用PACKAGE示例 --使用CALL调用PACKAGE的存储过程。 gaussdb=# CALL pkg_test.proc_ist_tbl_test('0A00B1','01001',24); gaussdb=# SELECT * FROM tbl_test; uid | area_id | level --------+---------+--------- 0A00B1 | 01001 | 24 (1 row) --使用SELECT调用PACKAGE的存储过程。 gaussdb=# SELECT pkg_test.proc_upd_tbl_test('0A00B1','01001','26'); gaussdb=# SELECT * FROM tbl_test; uid | area_id | level --------+---------+------- 0A00B1 | 01001 | 26 (1 row) --匿名块调用PACKAGE的存储过程。 gaussdb=# BEGIN pkg_test.proc_del_tbl_test('0A00B1'); END; / gaussdb=# SELECT * FROM tbl_test; uid | area_id | level -----+---------+------- (0 rows) --删除。 gaussdb=# DROP TABLE tbl_test; gaussdb=# DROP PACKAGE pkg_test;
  • 语法格式 CREATE PACKAGE SPECIFICATION语法格式。 CREATE [ OR REPLACE ] PACKAGE [ schema ] package_name [ invoker_rights_clause ] { IS | AS } item_list_1 END package_name; invoker_rights_clause可以被声明为AUTHID DEFINER或者AUTHID CURRENT_USER,分别为定义者权限和调用者权限。 item_list_1可以为声明的变量或者存储过程以及函数。 PACKAGE SPECIFICATION(包头)声明了包内的公有变量、函数、异常等,可以被外部函数或者存储过程调用。在PACKAGE SPECIFICATION中只能声明存储过程、函数,不能定义存储过程或者函数。 CREATE PACKAGE BODY语法格式。 CREATE [ OR REPLACE ] PACKAGE BODY [ schema ] package_name { IS | AS } declare_section [ initialize_section ] END package_name; PACKAGE BODY(包体内)定义了包的私有变量、函数等。如果变量或者函数没有在PACKAGE SPECIFICATION中声明过,那么这个变量或者函数则为私有变量或者私有函数。 PACKAGE BODY也可以声明实例化部分,用来初始化package,详见示例。
  • 注意事项 在package specification中声明过的函数或者存储过程,必须在package body中找到定义。 创建存储过程时,仅对CREATE的存储过程或PACKAGE本身加写锁,仅对执行过程中编译、执行会对函数和函数依赖的PACKAGE均加读锁。 在实例化中,无法调用带有commit/rollback的存储过程。 不能在Trigger中调用package函数。 不能在外部SQL中直接使用package当中的变量。 不允许在package外部调用package的私有变量和存储过程。 不支持存储过程不支持的用法,例如,在function中不允许调用commit/rollback,则package的function中同样无法调用commit/rollback。 不支持schema与package同名。 只支持A风格的存储过程和函数定义。 不支持package内有同名变量,包括包内同名参数。 package的全局变量为session级,不同session之间package的变量不共享。 package中调用自治事务的函数,不允许使用package中的cursor变量,以及不允许递归的使用package中cursor变量的函数。 package中不支持声明ref cursor变量。 package默认为SECURITY INVOKER权限,如果想将默认行为改为SECURITY DEFINER权限,需要设置guc参数behavior_compat_options='plsql_security_definer'。 被授予CREATE ANY PACKAGE权限的用户,可以在public模式和用户模式下创建PACKAGE。 如果需要创建带有特殊字符的package名,特殊字符中不能含有空格,并且设置GUC参数behavior_compat_options="skip_insert_gs_source",否则可能引起报错。 package创建时依赖未定义对象,如参数behavior_compat_options='plpgsql_dependency'打开,创建可执行,通过WARNING提示;如参数未打开,package创建不可执行。 如package中A风格函数已被视图直接依赖,且参数behavior_compat_options='plpgsql_dependency'打开,再次创建包体后视图可正常访问;如参数未打开,视图访问失败。 创建package函数时,其参数默认值支持含有package内变量,不支持跨package变量。 package中函数复杂调用,如:func(x).a,函数调用返回复合类型,支持跨schema调用,不支持通过database.schema.package.func(x).b的方式调用。 在创建package内的存储过程时,如果存储过程名称为schema.func或package.func形式,只会获取func的名称,schema声明或package声明无效,如果需要默认禁止这种行为,可以设置GUC参数behavior_compat_options='forbid_package_function_with_prefix'。 package内创建的带参数游标,可以跨package进行类型引用(%RowType)和打开使用,有以下限制: 暂不支持通过database.schema.package.cursor的方式调用游标。 当游标定义为函数参数时,需要提前设置参数behavior_compat_options='allow_procedure_compile_check',以支持解析游标的具体类型。 当未设置参数behavior_compat_options='allow_procedure_compile_check'时,cursor%RowType处理成复合类型,即record。设置参数后,支持解析游标的具体类型。
  • PG_TOTAL_USER_RESOURCE_INFO PG_TOTAL_USER_RESOURCE_INFO视图显示所有用户的资源使用情况,需要使用管理员用户进行查询。此视图在GUC参数use_workload_manager为on时才有效。其中,IO相关监控项在参数enable_logical_io_statistics为on时才有效。 表1 PG_TOTAL_USER_RESOURCE_INFO字段 名称 类型 描述 username name 用户名。 used_memory integer 正在使用的内存大小,单位MB。 total_memory integer 可以使用的内存大小,单位MB。值为0表示未限制最大可用内存,其限制取决于数据库最大可用内存。 used_cpu double precision 正在使用的CPU核数(仅统计复杂作业CPU使用 情况,且该值为相关控制组的CPU使用统计值)。 total_cpu integer 在该机器节点上,用户关联控制组的CPU核数总和。 used_space bigint 已使用的永久表存储空间大小,单位KB。 total_space bigint 可使用的永久表存储空间大小,单位KB,值为-1表示未限制最大存储空间。 used_temp_space bigint 已使用的临时空间大小,单位KB。 total_temp_space bigint 可使用的临时空间总大小,单位KB,值为-1表示未限制。 used_spill_space bigint 已使用的算子落盘空间大小,单位KB。 total_spill_space bigint 可使用的算子落盘空间总大小,单位KB,值为-1表示未限制。 read_kbytes bigint 数据库主节点:过去5秒内,该用户在数据库节点上复杂作业read的字节总数(单位KB)。 数据库节点:实例启动至当前时间为止,该用户复杂作业read的字节总数(单位KB)。 write_kbytes bigint 数据库主节点:过去5秒内,该用户在数据库节点上复杂作业write的字节总数(单位KB)。 数据库节点:实例启动至当前时间为止,该用户复杂作业write的字节总数(单位KB)。 read_counts bigint 数据库主节点:过去5秒内,该用户在数据库节点上复杂作业read的次数之和(单位次)。 数据库节点:实例启动至当前时间为止,该用户复杂作业read的次数之和(单位次)。 write_counts bigint 数据库主节点:过去5秒内,该用户在数据库节点上复杂作业write的次数之和(单位次)。 数据库节点:实例启动至当前时间为止,该用户复杂作业write的次数之和(单位次)。 read_speed double precision 数据库主节点:过去5秒内,该用户在单个数据库节点上复杂作业read平均速率(单位KB/s)。 数据库节点:过去5秒内,该用户在该数据库节点上复杂作业read平均速率(单位KB/s)。 write_speed double precision 数据库主节点:过去5秒内,该用户在单个数据库节点上复杂作业write平均速率(单位KB/s)。 数据库节点:过去5秒内,该用户在该数据库节点上复杂作业write平均速率(单位KB/s)。 父主题: 其他系统视图
  • 语法 匿名块的语法参见图1。 图1 anonymous_block::= 对以上语法图的解释如下: 匿名块程序实施部分,以BEGIN语句开始,以END语句停顿,以一个分号结束。输入“/”按回车执行它。 最后的结束符“/”必须独占一行,不能直接跟在END后面。 声明部分包括变量定义、类型、游标定义等。 最简单的匿名块不执行任何命令。但一定要在任意实施块里至少有一个语句,甚至是一个NULL语句。 下面列举了基本的匿名块程序: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 --空语句块 gaussdb=# BEGIN NULL; END; / ANONYMOUS BLOCK EXECUTE --将信息打印到控制台: gaussdb=# BEGIN dbe_output.print_line('hello world!'); END; / hello world! ANONYMOUS BLOCK EXECUTE --将变量内容打印到控制台: gaussdb=# DECLARE my_var VARCHAR2(30); BEGIN my_var :='world'; dbe_output.print_line('hello'||my_var); END; / helloworld ANONYMOUS BLOCK EXECUTE
  • 接口介绍 高级功能包DBE_RANDOM支持的所有接口请参见表 DBE_RANDOM接口参数说明。 表1 DBE_RANDOM接口参数说明 接口名称 描述 DBE_RANDOM.SET_SEED 设置一个随机数的种子。 DBE_RANDOM.GET_VALUE 生成一个大小介于指定的low及high之间的随机数。 DBE_RANDOM.SET_SEED 存储过程SEED用于设置一个随机数的种子。DBE_RANDOM.SET_SEED函数原型为: 1 DBE_RANDOM.SET_SEED (seed IN INTEGER); 表2 DBE_RANDOM.SET_SEED接口参数说明 参数 描述 seed 用于产生一个随机数的种子。 DBE_RANDOM.GET_VALUE 函数GET_VALUE生成一个大小介于指定的low及high之间的随机数。DBE_RANDOM.GET_VALUE函数原型为: 1 2 3 4 DBE_RANDOM.GET_VALUE( min IN NUMBER default 0, max IN NUMBER default 1) RETURN NUMBER; 表3 DBE_RANDOM.GET_VALUE接口参数说明 参数 描述 min 指定随机数大小的下边界,生成的随机数大于或等于min。 max 指定随机数大小的上边界,生成的随机数小于max。 实际上,只要求这里的参数类型是NUMERIC即可,对于左右边界的大小并没有要求。 DBE_RANDOM实现的是伪随机,所以若使用的初值(种子)不变,那么伪随机数的数序也不变,使用时需要注意。 生成的随机数有效数字为15位。
  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 --产生0到1之间的随机数: SELECT DBE_RANDOM.GET_VALUE(0,1); get_value ------------------ .917468812743886 (1 row) --对于指定范围内的整数,要加入参数min和max,并从结果中截取较小的数(最大值不能被作为可能的值)。所以对于0到99之间的整数,使用下面的代码: SELECT TRUNC(DBE_RANDOM.GET_VALUE(0,100)); trunc ------- 26 (1 row)
  • PG_SECLABELS PG_SECLABELS视图显示安全标签的信息。 表1 PG_SECLABELS字段 名称 类型 引用 描述 objoid oid 任意OID属性 该安全标签所属的对象的OID。 classoid oid PG_CLASS.oid 该安全标签所属的对象所在系统表的OID。 objsubid integer - 对于一个在表字段上的安全标签,是字段序号(引用表本身的objoid和classoid)。对于所有其他对象类型,这个字段为0。 objtype text - 该标签所属的对象的类型,文本格式。例如: table:表类型。 column:列类型。 objnamespace oid PG_NAMESPACE.oid 该对象的名称空间的OID,如果不适用,取值为NULL。 objname text - 该标签所属的对象的名称,文本格式。 provider text PG_SECLABEL.provider 该标签的提供者。 label text PG_SECLABEL.label 安全标签名称。 父主题: 用户和权限管理
  • GLOBAL_STATIO_USER_SEQUENCES GLOBAL_STATIO_USER_SEQUENCES视图显示各节点的命名空间中所有用户关系表类型为序列的I/O状态信息,如表1所示。 表1 GLOBAL_STATIO_USER_SEQUENCES字段 名称 类型 描述 node_name name 节点名称。 relid oid 序列OID。 schemaname name 序列中模式名。 relname name 序列名。 blks_read bigint 从序列中读取的磁盘块数。 blks_hit bigint 序列中缓存命中数。 父主题: Cache/IO
  • 参数说明 name 要创建的聚合函数名(可以有模式修饰) 。 input_data_type 该聚合函数要处理的输入数据类型。要创建一个零参数聚合函数,可以使用*代替输入数据类型列表。(count(*)就是这种聚合函数的一个实例。) base_type 在CREATE AGGREGATE语法中,输入数据类型是通过basetype参数指定的,而不是写在聚合的名称之后。需要注意的是这种以前语法仅允许一个输入参数。要创建一个零参数聚合函数,可以将basetype指定为"ANY"(而不是*)。 sfunc 将在每一个输入行上调用的状态转换函数的名称。 对于有N个参数的聚合函数,sfunc必须有 +1 个参数,其中的第一个参数类型为state_data_type,其余的匹配已声明的输入数据类型。 函数必须返回一个state_data_type类型的值。 这个函数接受当前状态值和当前输入数据,并返回下个状态值。A数据库的转换函数默认行为为strict,即会跳过NULL输入值。GaussDB需要用户自行定义转换函数strict属性。 state_data_type 聚合的状态值的数据类型。 ffunc 在转换完所有输入行后调用的最终处理函数,它计算聚合的结果。 此函数必须接受一个类型为state_data_type的参数。 聚合的输出数据类型被定义为此函数的返回类型。 如果没有声明ffunc则使用聚合结果的状态值作为聚合的结果,且输出类型为state_data_type。 initial_condition 状态值的初始设置(值)。 它必须是一个state_data_type类型可以接受的文本常量值。 如果没有声明,状态值初始为null 。 sort_operator 用于MIN或MAX类型聚合的排序操作符。 这个只是一个操作符名 (可以有模式修饰)。这个操作符假设接受和聚合一样的输入数据类型。 collection_func 目前该参数在集中式下不生效。 initial_collection_condition 收集函数状态值的初始设置(值)。 它必须是一个state_data_type类型可以接受的文本常量值。 如果没有声明,状态值初始为null 。 init_func sfunc状态值的初始设置函数。 它不能返回null值,必须返回state_data_type类型并且没有入参。如果同时设置init_func和initial_condition,init_func的返回值将会优先作为初始状态值。 is_shippable 标记该聚集函数是否能够下推执行,仅可以取值true或者false。目前该参数不影响系统内置聚集函数的下推行为,仅影响用户自定义聚集函数的行为,默认值为false。目前该参数在集中式下不生效。
  • 语法格式 CREATE AGGREGATE name ( input_data_type [ , ... ] ) ( SFUNC = sfunc, -- SFUNC1 = sfunc, // 过时的写法,等同于SFUNC = sfunc STYPE = state_data_type -- STYPE1 = state_data_type, // 过时的写法,等同于STYPE = state_data_type [ , FINALFUNC = ffunc ] [ , INITCOND = initial_condition ] -- [ , INITCOND1 = initial_condition ] // 过时的写法,等同于INITCOND = initial_condition [ , SORTOP = sort_operator ] [ , CFUNC = collection_func ] [ , INITCOLLECT = initial_collection_condition ] [ , IFUNC = init_func ] [ , SHIPPABLE = is_shippable ] ); or the old syntax CREATE AGGREGATE name ( BASETYPE = base_type, SFUNC = sfunc, -- SFUNC1 = sfunc, // 过时的写法,等同于SFUNC = sfunc STYPE = state_data_type -- STYPE1 = state_data_type, // 过时的写法,等同于STYPE = state_data_type [ , FINALFUNC = ffunc ] [ , INITCOND = initial_condition ] -- [ , INITCOND1 = initial_condition ] // 过时的写法,等同于INITCOND = initial_condition [ , SORTOP = sort_operator ] [ , CFUNC = collection_func ] [ , INITCOLLECT = initial_collection_condition ] [ , IFUNC = init_func ] );
  • 示例 --创建自定义函数。 gaussdb=# CREATE OR REPLACE FUNCTION int_add(int,int) returns int as $BODY$ declare begin return $1 + $2; end; $BODY$ language plpgsql; --创建聚集函数。 gaussdb=# CREATE AGGREGATE sum_add(int) ( sfunc = int_add, stype = int, initcond = '0' ); --创建测试表和添加数据。 gaussdb=# CREATE TABLE test_sum(a int,b int,c int); gaussdb=# INSERT INTO test_sum VALUES(1,2),(2,3),(3,4),(4,5); --执行聚集函数。 gaussdb=# SELECT sum_add(a) FROM test_sum; sum_add ----------- 10 --删除聚集函数。 gaussdb=# DROP AGGREGATE sum_add(int); --删除自定义函数。 gaussdb=# DROP FUNCTION int_add(int,int); --删除测试表。 gaussdb=# DROP TABLE test_sum;
  • GS_GLOBAL_CHAIN GS_GLOBAL_CHAIN系统表记录用户对防篡改用户表的修改操作信息,每条记录对应一次表级修改操作。具有审计管理员权限的用户可以查询此系统表,所有用户均不允许修改此系统表。 表1 GS_GLOBAL_CHAIN字段 名称 类型 描述 blocknum bigint 区块号,当前用户操作在账本中记录的序号。 dbname name 数据库名称。被修改的防篡改用户表所属的database。 username name 用户名,执行用户表修改操作的用户名。 starttime timestamp with time zone 用户执行操作的时间。 relid oid 用户表oid,被修改的防篡改用户表oid。 relnsp name 模式名,被修改的防篡改用户表所属的模式名。 relname name 用户表名,被修改的防篡改用户表名。 relhash hash16 当前操作产生的表级别hash变化量。 globalhash hash32 全局摘要,由当前行信息与前一行globalhash计算而来,将整个表串联起来,用于验证GS_GLOBAL_CHAIN数据完整性。 txcommand text 被记录操作的SQL语句。 父主题: 账本数据库
  • DB_TAB_SUBPARTITIONS DB_TAB_SUBPARTITIONS视图显示当前用户所能访问的二级分区表的信息。所有用户都可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 DB_TAB_SUBPARTITIONS字段 名称 类型 描述 table_owner character varying(64) 表的所有者。 table_name character varying(64) 关系表名称。 partition_name character varying(64) 分区名称。 subpartition_name character varying(64) 二级分区名称。 high_value text 二级分区的边界值。 对于范围分区和间隔分区,显示各分区的上边界值。 对于列表分区,显示各分区的取值列表。 对于哈希分区,显示各分区的编号。 tablespace_name name 二级分区表的表空间名称。 schema character varying(64) 名称空间的名称。 high_value_length integer 二级分区边界值的字符长度。 partition_position numeric 分区在表中的位置。 subpartition_position numeric 二级分区在分区中的位置。 pct_free numeric 块中可用空间的最小百分比。 pct_used numeric 暂不支持,值为NULL。 ini_trans numeric 初始事务数,默认值为4,非USTORE分区表时为NULL。 max_trans numeric 最大事务数,默认值为128,非USTORE分区表时为NULL。 initial_extent numeric 暂不支持,值为NULL。 next_extent numeric 暂不支持,值为NULL。 min_extent numeric 暂不支持,值为NULL。 max_extent numeric 暂不支持,值为NULL。 max_size numeric 暂不支持,值为NULL。 pct_increase numeric 暂不支持,值为NULL。 freelists numeric 暂不支持,值为NULL。 freelist_groups numeric 暂不支持,值为NULL。 logging character varying(3) 是否记录对表的更改。 compression character varying(8) 表分区的实际压缩属性。 compress_for character varying(30) 暂不支持,值为NULL。 num_rows numeric 二级分区中的行数。 blocks numeric 暂不支持,值为NULL。 empty_blocks numeric 暂不支持,值为NULL。 avg_space numeric 暂不支持,值为NULL。 chain_cnt numeric 暂不支持,值为NULL。 avg_row_len numeric 暂不支持,值为NULL。 sample_size numeric 暂不支持,值为NULL。 last_analyzed timestamp with time zone 最近分析此分区的日期。 buffer_pool character varying(7) 二级分区的缓冲池。 flash_cache character varying(7) 暂不支持,值为NULL。 cell_flash_cache character varying(7) 暂不支持,值为NULL。 global_stats character varying(3) 暂不支持,值为NULL。 user_stats character varying(3) 暂不支持,值为NULL。 interval character varying(3) 分区是否在间隔分区表的间隔节中。 segment_created character varying(3) 表二级分区是否创建了段。 indexing character varying(3) 暂不支持,值为NULL。 read_only character varying(3) 暂不支持,值为NULL。 inmemory character varying(8) 暂不支持,值为NULL。 inmemory_priority character varying(8) 暂不支持,值为NULL。 inmemory_distribute character varying(15) 暂不支持,值为NULL。 inmemory_compression character varying(17) 暂不支持,值为NULL。 inmemory_duplicate character varying(13) 暂不支持,值为NULL。 inmemory_service character varying(12) 暂不支持,值为NULL。 inmemory_service_name character varying(1000) 暂不支持,值为NULL。 cellmemory character varying(24) 暂不支持,值为NULL。 memoptimize_read character varying(8) 暂不支持,值为NULL。 memoptimize_write character varying(8) 暂不支持,值为NULL。 父主题: 分区表
  • MY_CONSTRAINTS MY_CONSTRAINTS视图显示当前用户下表中约束的信息。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 MY_CONSTRAINTS字段 名称 类型 描述 constraint_name character varying(64) 约束名。 constraint_type text 约束类型: c表示检查约束。 f表示外键约束。 p表示主键约束。 u表示唯一约束。 table_name character varying(64) 约束相关的表名。 index_owner character varying(64) 约束相关的索引的所有者(只针对唯一约束和主键约束)。 index_name character varying(64) 约束相关的索引的名称(只针对唯一约束和主键约束)。 owner character varying(64) 约束创建者。 父主题: 其他系统视图
  • SUMMARY_STAT_DATABASE 显示数据库各节点的状态统计信息的汇总求和结果(其中timestamp类型字段不进行求和,仅取所有节点该字段的最新值),如表1所示。 表1 SUMMARY_STAT_DATABASE 名称 类型 描述 datname name 数据库的名称。 numbackends bigint 当前连接到该数据库的后端数。 xact_commit numeric 此数据库中已经提交的事务数。 xact_rollback numeric 此数据库中已经回滚的事务数。 blks_read numeric 在这个数据库中读取的磁盘块的数量。 blks_hit numeric 高速缓存中已经命中的磁盘块的次数,这种情况下不需要从磁盘读取(高速缓存只包括数据库缓冲区高速缓存,不包括操作系统的文件系统缓存)。 tup_returned numeric 该数据库中顺序扫描获取的活跃行数和索引扫描返回的索引行数。 tup_fetched numeric 当前数据库通过索引返回的行数。 tup_inserted bigint 插入的行数。 tup_updated bigint 更新的行数。 tup_deleted bigint 删除的行数。 conflicts bigint 由于与数据库回放发生冲突而取消的查询数量(冲突仅在备机上发生)。请参见STAT_DATABASE_CONFLICTS获取更多信息。 temp_files numeric 该数据库中查询语句创建的临时文件数量。统计所有临时文件,不受GUC参数log_temp_files设置值影响。 temp_bytes numeric 该数据库中查询语句写入临时文件的数据总量。统计所有临时文件,不受GUC参数log_temp_files设置值影响。 deadlocks bigint 在该数据库中检索的死锁数。 blk_read_time double precision 通过数据库后端读取数据文件块花费的时间,以毫秒计算。 blk_write_time double precision 通过数据库后端写入数据文件块花费的时间,以毫秒计算。 stats_reset timestamp with time zone 重置当前状态统计的时间。 父主题: Object
  • GS_RECYCLEBIN GS_RECYCLEBIN描述了回收站对象的详细信息。 表1 gs_recyclebin字段 名称 类型 描述 oid oid 系统列。 rcybaseid oid 基表对象id,引用gs_recyclebin.oid。 rcydbid oid 当前对象所属数据库oid。 rcyrelid oid 当前对象oid。 rcyname name 回收站对象名称,格式“BIN$unique_id$oid$0”,其中unique_id为最多16字符唯一标识,oid为对象标识符。 rcyoriginname name 原始对象名称。 rcyoperation "char" 操作类型。 d表示drop。 t表示truncate。 rcytype integer 对象类型。 0表示table。 1表示index。 2表示toast table。 3表示toast index。 4表示sequence,指serial、bigserial、smallserial、largeserial类型自动关联的序列对象。 5表示partition。 6表示global index。 7表示物化视图。 rcyrecyclecsn bigint 对象drop、truncate时csn。 rcyrecycletime timestamp with time zone 对象drop、truncate时间。 rcycreatecsn bigint 对象创建时csn。 rcychangecsn bigint 对象定义改变的csn。 rcynamespace oid 包含这个关系的名字空间的OID。 rcyowner oid 关系所有者。 rcytablespace oid 这个关系存储所在的表空间。如果为0,则意味着使用该数据库的缺省表空间。如果关系在磁盘上没有文件,则这个字段没有什么意义。 rcyrelfilenode oid 回收站对象在磁盘上的文件的名称,如果没有则为0,用于TRUNCATE对象恢复时物理文件还原。 rcycanrestore boolean 是否可以被单独闪回。 rcycanpurge boolean 是否可以被单独purge。 rcyfrozenxid xid32 该表中所有在这个之前的事务ID已经被一个固定的("frozen")事务ID替换。 rcyfrozenxid64 xid 该表中所有在这个之前的事务ID已经被一个固定的("frozen")事务ID替换。 rcybucket oid 13.2.15.41 PG_HASHBUCKET中的桶信息。 父主题: 其他系统表
  • GS_INSTANCE_TIME 提供当前集节点下的各种时间消耗信息,主要分为以下类型: DB_TIME: 作业在多核下的有效时间花销。 CPU_TIME:CPU的时间花销。 EXECUTION_TIME:执行器内的时间花销。 PARSE_TIME:SQL解析的时间花销。 PLAN_TIME:生成Plan的时间花销。 REWRITE_TIME:SQL重写的时间花销。 PL_EXECUTION_TIME :PL/SQL(存储过程)执行的时间花销。 PL_COMPILATION_TIME:PL/SQL(存储过程)编译的时间花销。 NET_SEND_TIME:网络上的时间花销。 DATA_IO_TIME:I/O的时间花销。 表1 GS_INSTANCE_TIME字段 名称 类型 描述 stat_id integer 统计编号。 stat_name text 类型名称。 value bigint 时间值(单位:微秒)。 父主题: 其他系统视图
  • 字符集与字符序 字符集(Character Set)是字符的编码规则,字符序(Collation)是字符的排序规则,本章主要对GaussDB的B模式(即sql_compatibility = 'B')下的字符集、字符序进行介绍,以下介绍的字符集、字符序规则和语法仅在B模式下支持。 GaussDB目前所支持的字符集可以参考CREATE DATABASE章节中ENCODING部分介绍,所支持的字符序可以通过查询系统表PG_COLLATION。 其中,部分字符集在B模式下存在默认字符序,可以参考表1。 字符集和字符序存在以下说明: 每一个字符集都有一个或多个字符序,只有一个字符序为字符集的默认字符序。 每一个字符序仅有一个相关联的字符集。 相同数据使用不同的字符序排序结果可能会不同。 在GaussDB中,utf8mb4与utf8为同一字符集。 在Gaussdb的B模式(即sql_compatibility = 'B')下,BINARY字符集与SQL_ASCII字符集为同一字符集。 建议表字段和server_encoding选择相同字符集,避免转码带来的性能损耗。 GaussDB数据库支持以下功能: 支持多种字符集存储字符串。 支持使用字符序比较字符串。 支持数据库级、模式级、表级、字段级字符集和字符序。 暂不支持在同服务器、同数据库、同一个表、同一条SQL语句中混合使用不同字符集和字符序的字符串。 客户端连接的字符集和字符序 数据库级字符集和字符序 模式级字符集和字符序 表级字符集和字符序 列级字符集字符序 字符类型表达式的字符集和字符序 字符集和字符序合并规则 父主题: SQL参考
  • ADM_SCHEDULER_JOB_ARGS ADM_SCHEDULER_JOB_ARG视图显示数据库中所有任务的有关参数信息。默认只有系统管理员权限才可以访问,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 ADM_SCHEDULER_JOB_ARGS字段 名称 类型 描述 owner character varying(128) 参数所属作业的拥有者。 job_name character varying(128) 参数所属作业名。 argument_name character varying(128) 参数名称。 argument_position numeric 参数在参数列表中的位置。 argument_type character varying(257) 参数的数据类型,可以是用户的自定义数据类型。 value character varying(4000) 参数值。 anydata_value character varying(4000) 暂不支持,值为NULL。 out_argument character varying(5) 保留字段,值为NULL。 父主题: 其他系统视图
  • GS_TOTAL_MEMORY_DETAIL GS_TOTAL_MEMORY_DETAIL视图显示当前数据库节点的内存使用情况,单位为MB。当GUC参数enable_memory_limit的值为off时,本视图不可用。 表1 GS_TOTAL_MEMORY_DETAIL字段 名称 类型 描述 nodename text 节点名称。 memorytype text 内存类型,包括以下几种: max_process_memory:GaussDB实例所占用的内存大小。 process_used_memory:GaussDB进程所使用的内存大小。 max_dynamic_memory:最大动态内存。 dynamic_used_memory:已使用的动态内存。 dynamic_peak_memory:内存的动态峰值。 dynamic_used_shrctx:最大动态共享内存上下文。 dynamic_peak_shrctx:共享内存上下文的动态峰值。 max_backend_memory:使用HA端口执行业务可使用的最大内存上限。 backend_used_memory:使用HA端口执行业务已使用的内存。 max_shared_memory:最大共享内存。 shared_used_memory:已使用的共享内存。 max_sctpcomm_memory:通信库所允许使用的最大内存。 sctpcomm_used_memory:通信库已使用的内存大小。 sctpcomm_peak_memory:通信库的内存峰值。 other_used_memory:其他已使用的内存大小。 llvm_used_memory:当前系统中 Codegen 执行生成的且查询未释放的表达式 IR 所占用内存大小。 memorymbytes integer 内存类型分配内存的大小。 父主题: 其他系统视图
  • ai_watchdog_monitor_status 表1 ai_watchdog_monitor_status参数说明 参数 类型 描述 metric_name text metric指标名称: tps:TPS。 tps_hourly:每小时的TPS均值。 shared_used_mem:共享内存使用量(MB)。 dynamic_used_shrctx:共享内存上下文使用量(MB)。 other_used_mem:其他内存使用量(MB)。 process_used_mem:系统常驻内存使用量(MB)。 dynamic_used_mem:动态内存使用量(MB)。 malloc_failures:每个采集间隔内的内存分配失败次数。 D_state_rate:D状态线程比例。 R_state_rate:R状态线程比例。 S_state_rate:S状态线程比例。 db_state:数据库的状态(68表示D、82表示R、83表示S)。 cpu_usage:CPU使用率,上限100。 disk_io:两个采集间隔内的磁盘IO延迟。 network_io:两个采集间隔内的网络IO延迟。 threadpool_usage:线程池使用率。 threadpool_hang_rate:线程池group处于hang状态的比例。 max_length int 采集队列长度。 current_length int 当前采集到的样本数。 collection_interval int 采集间隔,单位秒。 latest_value int 上次采集到的值,没采集到为null。 last_report timestamp 上次采集时刻。 父主题: AI Watchdog
  • V_SESSION V_SESSION视图显示当前所有会话的信息,该视图只有系统管理员可以访问,普通用户需要授权才能访问,该视图同时存在于PG_CATALOG和YS Schema下。 表1 V_SESSION字段 名称 类型 描述 saddr raw 暂不支持,值为NULL。 sid bigint 会话ID。 serial# integer 当前活动的后台线程的序号,在GaussDB中为0。 audsid numeric 暂不支持,值为NULL。 paddr raw 暂不支持,值为NULL。 schema# numeric 暂不支持,值为NULL。 schemaname name 登录该后台的用户名。 user# oid 登录此后台线程的用户的OID。oid 为0表示此后台线程为全局辅助线程(auxiliary)。 username name 登录此后台线程的用户名。username为空表示此后台线程为全局辅助线程(auxiliary)。 command numeric 暂不支持,值为NULL。 ownerid numeric 暂不支持,值为NULL。 taddr character varying(16) 暂不支持,值为NULL。 lockwait character varying(16) 暂不支持,值为NULL。 machine text 客户端的主机名,这个字段是通过client_addr的反向DNS查找得到。这个字段只有在启动log_hostname且使用IP连接时才非空。 sql_id bigint 查询语句的ID。 client_info text 客户端信息。 event text 语句当前排队状态。可能值是: ● waiting in queue:表示语句在排队中。 ● 空:表示语句正在运行。 sql_exec_start timestamp with time zone 开始当前活跃查询的时间, 如果state的值不是active,则这个值是上一个查询的开始时间。 program text 连接到该后台的应用名。 status text 该后台当前总体状态。可能值是: ● active:后台正在执行一个查询。 ● idle:后台正在等待一个新的客户端命令。 ● idle in transaction:后台在事务中,但事务中没有语句在执行。 ● idle in transaction (aborted):后台在事务中,但事务中有语句执行失败。 ● fastpath function call:后台正在执行一个fast-path函数。 ● disabled:如果后台禁用track_activities,则报告这个状态。 server character varying(9) 暂不支持,值为NULL。 pdml_status character varying(8) 当前会话是否启用DML的并行执行。 port numeric 当前会话的端口号。 process character varying(24) 当前会话的进程号。 logon_time timestamp(0) without time zone 当前会话的登录时间。 last_call_et integer 当前会话上次状态发生改变的时长。 osuser character varying(128) 暂不支持,值为NULL。 terminal character varying(30) 暂不支持,值为NULL。 type character varying(10) 暂不支持,值为NULL。 sql_address raw 暂不支持,值为NULL。 sql_hash_value numeric 暂不支持,值为NULL。 sql_child_number numeric 暂不支持,值为NULL。 sql_exec_id numeric 暂不支持,值为NULL。 prev_sql_addr raw 暂不支持,值为NULL。 prev_hash_value numeric 暂不支持,值为NULL。 prev_sql_id character varying(13) 暂不支持,值为NULL。 prev_child_number numeric 暂不支持,值为NULL。 prev_exec_start timestamp(0) without time zone 暂不支持,值为NULL。 prev_exec_id numeric 暂不支持,值为NULL。 plsql_entry_object_id numeric 暂不支持,值为NULL。 plsql_entry_subprogram_id numeric 暂不支持,值为NULL。 plsql_object_id numeric 暂不支持,值为NULL。 plsql_subprogram_id numeric 暂不支持,值为NULL。 module character varying(64) 暂不支持,值为NULL。 module_hash numeric 暂不支持,值为NULL。 action character varying(64) 暂不支持,值为NULL。 action_hash numeric 暂不支持,值为NULL。 fixed_table_sequence numeric 暂不支持,值为NULL。 row_wait_obj# numeric 暂不支持,值为NULL。 row_wait_file# numeric 暂不支持,值为NULL。 row_wait_block# numeric 暂不支持,值为NULL。 row_wait_row# numeric 暂不支持,值为NULL。 top_level_call# numeric 暂不支持,值为NULL。 pdml_enabled character varying(3) 暂不支持,值为NULL。 failover_type character varying(13) 暂不支持,值为NULL。 failover_method character varying(10) 暂不支持,值为NULL。 failed_over character varying(3) 暂不支持,值为NULL。 resource_consumer_group character varying(32) 暂不支持,值为NULL。 pddl_status character varying(8) 暂不支持,值为NULL。 pq_status character varying(8) 暂不支持,值为NULL。 current_queue_duration numeric 暂不支持,值为NULL。 client_identifier character varying(64) 暂不支持,值为NULL。 blocking_session_status character varying(11) 暂不支持,值为NULL。 blocking_instance numeric 暂不支持,值为NULL。 blocking_session numeric 暂不支持,值为NULL。 final_blocking_session_status character varying(11) 暂不支持,值为NULL。 final_blocking_instance numeric 暂不支持,值为NULL。 final_blocking_session numeric 暂不支持,值为NULL。 seq# numeric 暂不支持,值为NULL。 event# numeric 暂不支持,值为NULL。 p1text character varying(64) 暂不支持,值为NULL。 p1 numeric 暂不支持,值为NULL。 p1raw raw 暂不支持,值为NULL。 p2text character varying(64) 暂不支持,值为NULL。 p2 numeric 暂不支持,值为NULL。 p2raw raw 暂不支持,值为NULL。 p3text character varying(64) 暂不支持,值为NULL。 p3 numeric 暂不支持,值为NULL。 p3raw raw 暂不支持,值为NULL。 wait_class_id numeric 暂不支持,值为NULL。 wait_class# numeric 暂不支持,值为NULL。 wait_class character varying(64) 暂不支持,值为NULL。 wait_time numeric 暂不支持,值为NULL。 seconds_in_wait numeric 暂不支持,值为NULL。 state character varying(19) 暂不支持,值为NULL。 wait_time_micro numeric 暂不支持,值为NULL。 time_remaining_micro numeric 暂不支持,值为NULL。 time_since_last_wait_micro numeric 暂不支持,值为NULL。 service_name character varying(64) 暂不支持,值为NULL。 sql_trace character varying(8) 暂不支持,值为NULL。 sql_trace_waits character varying(5) 暂不支持,值为NULL。 sql_trace_binds character varying(5) 暂不支持,值为NULL。 sql_trace_plan_stats character varying(10) 暂不支持,值为NULL。 session_edition_id numeric 暂不支持,值为NULL。 creator_addr raw 暂不支持,值为NULL。 creator_serial# numeric 暂不支持,值为NULL。 ecid character varying(64) 暂不支持,值为NULL。 sql_translation_profile_id numeric 暂不支持,值为NULL。 pga_tunable_mem numeric 暂不支持,值为NULL。 shard_ddl_status character varying(8) 暂不支持,值为NULL。 con_id numeric 暂不支持,值为NULL。 external_name character varying(1024) 暂不支持,值为NULL。 plsql_debugger_connected character varying(5) 暂不支持,值为NULL。 父主题: 其他系统视图
  • STAT_SYS_INDEXES 显示当前节点pg_catalog、information_schema以及pg_toast模式中所有系统表的索引状态信息,如表1所示。 表1 STAT_SYS_INDEXES字段 名称 类型 描述 relid oid 此索引的表的OID。 indexrelid oid 索引的OID。 schemaname name 索引所在的Schema名。 relname name 索引的表名。 indexrelname name 索引名。 idx_scan bigint 该索引上执行的索引扫描次数。 idx_tup_read bigint 该索引上扫描返回的索引项数。 idx_tup_fetch bigint 使用该索引的简单索引扫描在原表中抓取的活跃行数。 last_updated timestamp with time zone 视图中该对象监控数据最后一次更新的时间。 父主题: Object
  • STATIO_ALL_TABLES STATIO_ALL_TABLES视图将包含数据库中每个表(包括TOAST表)的一行,显示出特定表I/O的统计,如表1所示。 表1 STATIO_ALL_TABLES字段 名称 类型 描述 relid oid 表OID。 schemaname name 该表模式名。 relname name 表名。 heap_blks_read bigint 从该表中读取的磁盘块数。 heap_blks_hit bigint 该表缓存命中数。 idx_blks_read bigint 从表中所有索引读取的磁盘块数。 idx_blks_hit bigint 表中所有索引命中缓存数。 toast_blks_read bigint 该表的TOAST表读取的磁盘块数(如果存在)。 toast_blks_hit bigint 该表的TOAST表命中缓冲区数(如果存在)。 tidx_blks_read bigint 该表的TOAST表索引读取的磁盘块数(如果存在)。 tidx_blks_hit bigint 该表的TOAST表索引命中缓冲区数(如果存在)。 last_updated timestampwith time zone 视图中该对象监控数据最后一次更新的时间。 父主题: Cache/IO
  • DDL 在GaussDB中,建议DDL(建表、COMMENT等)操作统一执行。在批处理作业中尽量避免DDL操作,避免大量并发事务对性能的影响。 在非日志表(unlogged table)使用完后,立即执行数据清理(TRUNCATE)操作。因为在异常场景下,GaussDB不保证非日志表(unlogged table)数据的安全性。 临时表和非日志表的存储方式建议和基表相同。 索引字段的总长度不超过50字节。否则,索引大小会膨胀比较严重,带来较大的存储开销,同时索引性能也会下降。 不要使用DROP…CASCADE方式删除对象,除非已经明确对象间的依赖关系,以免误删。
  • 数据加载和卸载 在INSERT语句中显式设置插入的字段列表。例如: 1 INSERT INTO task(name,id,comment) VALUES ('task1','100','第100个任务'); 在批量数据入库之后,或者数据增量达到一定阈值后,建议对表进行ANALYZE操作,防止统计信息不准确而导致的执行计划劣化。 如果要清理表中的所有数据,建议使用TRUNCATE TABLE方式,不要使用DELETE TABLE方式。DELETE TABLE方式删除性能差,且不会释放那些已经删除了的数据占用的磁盘空间。
  • MY_TAB_SUBPARTITIONS MY_TAB_SUBPARTITIONS视图显示当前用户可访问的所有子分区表信息。该视图所有用户可访问,仅可查看当前用户所属信息。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 MY_TAB_SUBPARTITIONS字段 名称 类型 描述 table_owner character varying(64) 表的所有者。 schema character varying(64) 模式名称。 table_name character varying(64) 表名。 partition_name character varying(64) 分区名称。 subpartition_name character varying(64) 子分区名称。 high_value text 子分区边界值表达式。 high_value_length integer 子分区边界值表达式的长度。 partition_position numeric 分区在表内的位置。 subpartition_position numeric 子分区在分区中的位置。 tablespace_name name 子分区所在的表空间名称。 pct_free numeric 块中最小可用空间百分比。 pct_used numeric 暂不支持,值为NULL。 ini_trans numeric 初始事务数。 max_trans numeric 最大事务数。 initial_extent numeric 暂不支持,值为NULL。 next_extent numeric 暂不支持,值为NULL。 min_extent numeric 暂不支持,值为NULL。 max_extent numeric 暂不支持,值为NULL。 max_size numeric 暂不支持,值为NULL。 pct_increase numeric 暂不支持,值为NULL。 freelists numeric 暂不支持,值为NULL。 freelist_groups numeric 暂不支持,值为NULL。 logging character varying(7) 是否记录对表的更改: YES NO compression character varying(8) 子分区是否压缩。取值范围:ENABLED、DISABLED。 compress_for character varying(30) 暂不支持,值为NULL。 num_rows numeric 暂不支持,值为NULL。 blocks numeric 暂不支持,值为NULL。 empty_blocks numeric 暂不支持,值为NULL。 avg_space numeric 暂不支持,值为NULL。 chain_cnt numeric 暂不支持,值为NULL。 avg_row_len numeric 暂不支持,值为NULL。 sample_size numeric 暂不支持,值为NULL。 last_analyzed timestamp with time zone 最近分析此表的日期。数据库重启后,数据会丢失。 buffer_pool character varying(7) 子分区的缓冲池: DEFAULT KEEP RECYCLE NULL flash_cache character varying(7) 暂不支持,值为NULL。 cell_flash_cache character varying(7) 暂不支持,值为NULL。 global_stats character varying(3) 暂不支持,值为NULL。 user_stats character varying(3) 暂不支持,值为NULL。 interval character varying(3) 分区是在间隔分区表的间隔节中(YES),还是在范围节中(NO)。 segment_created character varying(3) 表子分区段是否已创建: YES:已创建。 NO:未创建。 N/A:此表没有子分区。 indexing character varying(3) 暂不支持,值为NULL。 read_only character varying(5) 暂不支持,值为NULL。 inmemory character varying(8) 暂不支持,值为NULL。 inmemory_priority character varying(8) 暂不支持,值为NULL。 inmemory_distribute character varying(15) 暂不支持,值为NULL。 inmemory_compression character varying(17) 暂不支持,值为NULL。 inmemory_duplicate character varying(13) 暂不支持,值为NULL。 inmemory_service character varying(12) 暂不支持,值为NULL。 inmemory_service_name character varying(1000) 暂不支持,值为NULL。 cellmemory character varying(24) 暂不支持,值为NULL。 memoptimize_read character varying(8) 暂不支持,值为NULL。 memoptimize_write character varying(8) 暂不支持,值为NULL。 父主题: 分区表
  • SUMMARY_STAT_BAD_BLOCK 获得数据库各节点的表、索引等文件的读取失败信息的汇总求和结果(其中first_time取最早的时间,last_time取最新的时间),如表1所示。 表1 SUMMARY_STAT_BAD_BLOCK字段 名称 类型 描述 databaseid integer database的oid。 tablespaceid integer tablespace的oid。 relfilenode integer relation的file node。 forknum bigint fork编号。 error_count bigint error的数量。 first_time timestamp with time zone 页面损坏第一次出现的时间。 last_time timestamp with time zone 页面损坏最后出现的时间。 父主题: Object
  • 命名SQL描述符区域 一个命名SQL描述符区域由一个头部以及一个或多个条目描述符区域构成。头部包含与整个描述区域相关的信息,而条目描述符区域则描述结果行中的某一列。 在使用SQL描述符区域之前,需要分配一个SQL描述符区域: EXEC SQL ALLOCATE DESCRIPTOR identifier; 当不再需要这个描述符区域时,应及时释放: EXEC SQL DEALLOCATE DESCRIPTOR identifier; 要使用一个描述符区域,需要使用INTO子句声明: EXEC SQL FETCH NEXT FROM mycursor INTO SQL DESCRIPTOR mydesc; 如果结果集为空,该描述符区域仍会包含查询的元数据。 对于还没有执行的预备查询,可以使用DESCRIBE得到其结果集的元数据: EXEC SQL BEGIN DECLARE SECTION; char *sql_stmt = "SELECT * FROM table1"; EXEC SQL END DECLARE SECTION; EXEC SQL PREPARE stmt1 FROM :sql_stmt; EXEC SQL DESCRIBE stmt1 INTO SQL DESCRIPTOR mydesc; 在DESCRIBE和FETCH语句中,INTO和USING关键词的使用相似:它们产生结果集以及一个描述符区域的元数据。 从头部检索一个描述符区域的值并且将其存储到一个宿主变量中: EXEC SQL GET DESCRIPTOR name :hostvar = field; 当前只定义了一个头部描述符区域COUNT,它存放描述符区域的条目(即结果集中包含多少列),宿主变量为一个整数类型,需从条目描述符区域中得到一个具体值: EXEC SQL GET DESCRIPTOR name VALUE num :hostvar = field; num可以是一个字符整数或者一个包含整数的宿主变量。可能的类型如下: CARDINALITY(整数):结果集中的行数 DATA:实际的数据项(这个范围的实际数据类型取决于查询) DATETIME_INTERVAL_CODE(整数):当TYPE是9时,DATETIME_INTERVAL_CODE将具有以下值之一:1表示DATE,2表示TIME,3表示TIMESTAMP,4表示TIME WITH TIME ZONE,5表示TIMESTAMP WITH TIME ZONE。 INDICATOR(整数):指示符(表示一个空值或者一个值截断) LENGTH(整数):以字符计的数据长度 NAME(string):列名 OCTET_LENGTH(整数):以字节计的数据字符表达的长度 PRECISION(整数):精度(用于类型numeric) RETURNED_LENGTH(整数):以字符计的数据长度 RETURNED_OCTET_LENGTH(整数):以字节计的数据字符表达的长度 SCALE(整数):比例(用于类型numeric) TYPE(整数):列的数据类型的数字编码 要检索字段数值并且把它存储到一个宿主变量里,使用如下命令: EXEC SQL GET DESCRIPTOR mydesc VALUE num :hostvar = field num可以是一个字符整数或者一个包含整数的宿主变量。可能的字段有: DATA 实际数据项(这个字段的数据类型依赖于这个查询) NAME(string) 字段名称 手动建立一个描述符区域为一个查询或游标提供输入参数,使用如下命令: EXEC SQL SET DESCRIPTOR name VALUE numfield = :hostvar; 在一个FETCH语句中检索多行记录且用数组类型的宿主变量来存储数据,示例如下: EXEC SQL BEGIN DECLARE SECTION; int id[5]; EXEC SQL END DECLARE SECTION; EXEC SQL FETCH 5 FROM mycursor INTO SQL DESCRIPTOR mydesc; EXEC SQL GET DESCRIPTOR mydesc VALUE 1 :id = DATA; 父主题: SQL描述符区域
共100000条