华为云用户手册

  • sql_use_spacelimit 参数说明:限制单个SQL在单个DN上,触发写盘操作时,所有类型写盘文件的总空间大小,管控的空间包括普通表、临时表以及中间结果集落盘占用的空间。系统管理员用户也受该参数限制。 参数类型:USERSET 取值范围:整型,-1~INT_MAX,单位为KB。其中-1表示没有限制。 默认值:配置sql_use_spacelimit为实例所在磁盘空间总容量的10%。 例如,执行语句中配置参数sql_use_spacelimit=100,当出现单DN写盘超过100kB时,DWS会主动终止该query的运行,并提示用户单DN写盘量超阈值。 1 2 insert into user1.t1 select * from user2.t1; ERROR: The space used on DN (104 kB) has exceeded the sql use space limit (100 kB). 建议处理方式: 优化语句,减少语句写盘占用空间。 如果磁盘空间充足可以适当调大该参数。
  • temp_file_limit 参数说明:语句执行过程中触发落盘操作时,限制语句中单个线程落盘文件的总空间大小。例如,排序和哈希表使用的临时文件或者游标占用的临时文件。 此设置为会话级别的落盘文件控制。 参数类型:SUSET 取值范围:整型,-1~INT_MAX,单位为KB。其中-1表示没有限制。 默认值:配置temp_file_limit为实例所在磁盘空间总容量的10%。 SQL查询执行时使用的临时表空间不在此限制。
  • bi_page_reuse_factor 参数说明:行存表批量插入场景下,主备DN使用页复制进行数据同步时,可以复用的旧页面空闲空间的百分比。 参数类型:USERSET 取值范围:整型,0~100,单位为%。其中0表示不对页面进行复用,全部申请新页面。 默认值:70 不建议将此值设置为50以下(0除外),如果复用页面的空闲空间较小的话,会使主备DN间传输过多的旧页面数据,从而导致批量插入性能下降。 不建议将此值设置为90以上,如果此值设置过高,会导致频繁查询空闲页面,但又无法复用旧页面,得不偿失。
  • 修改一个序列 ALTER SEQUENCE命令更改现有序列的属性,包括修改拥有者、归属列和最大值。 指定序列与列的归属关系。 将序列和一个表的指定字段进行关联。在删除那个字段或其所在表的时候会自动删除已关联的序列。 1 ALTER SEQUENCE seq1 OWNED BY T2.id; 将序列serial的最大值修改为300: 1 ALTER SEQUENCE seq1 MAXVALUE 300;
  • 注意事项 新序列值的产生是靠GTM维护的,默认情况下,每申请一个序列值都要向GTM发送一次申请,GTM在当前值的基础上加上步长值作为产生的新值返回给调用者。GTM作为全局唯一的节点,势必成为性能的瓶颈,所以对于需要大量频繁产生序列号的操作,如使用Bulkload工具进行数据导入场景,是非常不推荐产生默认序列值的。比如,在下面所示的场景中, INSERT FROM SELECT语句的性能会非常慢。 1 2 3 4 5 6 7 CREATE SEQUENCE newSeq1; CREATE TABLE newT1 ( id int not null default nextval('newSeq1'), name text ); INSERT INTO newT1(name) SELECT name from T1; 可以提高性能的写法是(假设T1表导入newT1表中的数据为10000行): 1 2 INSERT INTO newT1(id, name) SELECT id,name from T1; SELECT SETVAL('newSeq1',10000); 序列操作函数nextval(),setval() 等均不支持回滚。另外setval设置的新值,会对当前会话的nextval立即生效,但对其他会话,如果定义了cache,不会立即生效,在用尽所有缓存的值后,其变动才被其他会话感知。所以为了避免产生重复值,要谨慎使用setval,设置的新值不能是已经产生的值或者在缓存中的值。 如果必须要在bulkload场景下产生默认序列值,则一定要为newSeq1定义足够大的cache,并且不要定义Maxvalue或者Minvalue。数据库会试图将nextval('sequence_name')的调用下推到Data Node,以提高性能。 目前GTM对并发的连接请求是有限制的,当Data Node很多时,将产生大量并发连接, 这时一定要控制bulkload的并发数目,避免耗尽GTM的连接资源。如果目标表为复制表(DISTRIBUTE BY REPLICATION)时下推将不能进行。当数据量较大时,这对数据库将是个灾难。除了性能问题之外,空间也可能会剧烈膨胀,在导入结束后,需要用vacuum full来恢复。最好的方式还是如上建议的,不要在bulkload的场景中产生默认序列值。 另外,序列创建后,在每个节点上都维护了一张单行表,存储序列的定义及当前值,但此当前值并非GTM上的当前值,只是保存本节点与GTM交互后的状态。如果其他节点也向GTM申请了新值,或者调用了Setval修改了序列的状态,不会刷新本节点的单行表,但因每次申请序列值是向GTM申请,所以对序列正确性没有影响。
  • 创建序列 方法一: 声明字段类型为序列整型来定义标识符字段。例如: 1 2 3 4 5 CREATE TABLE T1 ( id serial, name text ); 方法二: 创建序列,并通过nextval('sequence_name')函数指定为某一字段的默认值。这种方式更灵活,可以为序列定义cache,一次预申请多个序列值,减少与GTM的交互次数,来提高性能。 创建序列 1 CREATE SEQUENCE seq1 cache 100; 指定为某一字段的默认值,使该字段具有唯一标识属性。 1 2 3 4 5 CREATE TABLE T2 ( id int not null default nextval('seq1'), name text ); 除了为序列指定了cache,方法二所实现的功能基本与方法一类似。但是一旦定义cache,序列将会产生空洞(序列值为不连贯的数值,如:1.4.5),并且不能保序。另外为某序列指定从属列后,该列删除,对应的sequence也会被删除。 虽然数据库并不限制序列只能为一列产生默认值,但最好不要多列共用同一个序列。 当前版本只支持在定义表的时候指定自增列,或者指定某列的默认值为nextval('seqname'), 不支持在已有表中增加自增列或者增加默认值为nextval('seqname')的列。
  • GLOBAL_TABLE_CHANGE_STAT GLOBAL_TABLE_CHANGE_STAT视图显示当前数据库中所有表格(不包括外表)变更情况。表示次数的各字段为实例启动以来的累计值。 表1 GLOBAL_TABLE_CHANGE_STAT字段 名称 类型 描述 schemaname name 表的命名空间。 relname name 表的名称。 last_vacuum timestamp with time zone 最后一次手动Vacuum的时间。 vacuum_count bigint 手动Vacuum的次数。为各CN节点上次数之和。 last_autovacuum timestamp with time zone 最后一次自动Vacuum的时间。 autovacuum_count bigint 自动Vacuum的次数。为各CN节点上次数之和。 last_analyze timestamp with time zone 最后一次分析(包括手动和自动)的时间。 analyze_count bigint 分析(包括手动和自动)的次数。由于analyze会同时在所有节点上进行,该字段为所有CN节点上的最大值。 last_autoanalyze timestamp with time zone 最后一次自动分析的时间。 autoanalyze_count bigint 自动分析的次数。为各CN节点上次数之和。 last_change bigint 最后一次修改(INSERT,UPDATE或DELETE)的时间。 父主题: 系统视图
  • PG_SHSECLABEL PG_SHSECLABEL系统表存储在共享数据库对象上的安全标签。安全标签可以用SECURITY LABEL命令操作。 查看安全标签的简单点的方法,请参阅PG_SECLABELS。 PG_SECLABEL的作用类似,只是它是用于在单个数据库内部的对象的安全标签的。 不同于大多数的系统表,PG_SHSECLABEL在一个集群中的所有数据库中共享:每个数据库集群只有一个PG_SHSECLABEL,而不是每个数据库一个。 表1 PG_SHSECLABEL字段 名字 类型 引用 描述 objoid oid 任意OID属性 此安全标签所属对象的OID。 classoid oid PG_CLASS.oid 对象所属系统目录的OID。 provider text - 与此标签关联的标签提供者。 label text - 应用于该对象的安全标签。 父主题: 系统表
  • PG_STATIO_SYS_TABLES PG_STATIO_SYS_TABLES视图显示命名空间中所有系统表的IO状态信息。 表1 PG_STATIO_SYS_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表索引命中缓冲区数(如果存在)。 父主题: 系统视图
  • PG_STATIO_USER_SEQUENCES PG_STATIO_USER_SEQUENCES视图显示命名空间中所有用户关系表类型为序列的IO状态信息。 表1 PG_STATIO_USER_SEQUENCES字段 名称 类型 描述 relid oid 序列OID。 schemaname name 序列中模式名。 relname name 序列名。 blks_read bigint 从序列中读取的磁盘块数。 blks_hit bigint 序列中缓存命中数。 父主题: 系统视图
  • DBA_TRIGGERS DBA_TRIGGERS视图存储关于数据库内的触发器信息。需要有系统管理员权限才可以访问。 名称 类型 描述 trigger_name character varying(64) 触发器名称。 table_name character varying(64) 定义触发器的表的名称。 table_owner character varying(64) 定义触发器的表的所有者。 父主题: 系统视图
  • PG_JOB_PROC PG_JOB_PROC视图用于代替之前版本的PG_JOB_PROC系统表,提供对之前版本的前向兼容。原PG_JOB_PROC系统表已经和原PG_JOB系统表一同并入当前版本的PG_JOBS系统表,关于PG_JOBS系统表的描述详见PG_JOBS。 表1 PG_JOB_PROC字段 名字 类型 描述 job_id bigint 作业ID。 what text 作业内容。 父主题: 系统视图
  • PG_SECLABELS PG_SECLABELS视图提供关于安全标签的信息。 表1 PG_SECLABELS字段 名字 类型 引用 描述 objoid oid 任意OID属性 安全标签所属的对象的OID。 classoid oid PG_CLASS.oid 此对象的系统表的OID。 objsubid integer - 对于某个在表字段上的安全标签,为字段编号(引用表本身的objoid和classoid)。对于所有其他对象类型,该字段为0。 objtype text - 标签出现的对象的类型。 objnamespace oid PG_NAMESPACE.oid 对象的命名空间的OID,如果适用;否则为NULL。 objname text - 标签适用的对象名。 provider text PG_SECLABEL.provider 与标签相关的标签提供者。 label text PG_SECLABEL.label 应用于此对象的安全标签。 父主题: 系统视图
  • 应用示例 查询某节点DN数量: 1 2 3 4 5 6 7 SELECT count(node_name),node_host FROM pgxc_node WHERE node_type='D' GROUP BY 2; count | node_host -------+--------------- 1 | 192.**.**.10 1 | 192.**.**.11 1 | 192.**.**.12 (3 rows) 查询集群的CN和DN信息: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 SELECT * FROM pgxc_node; node_name | node_type | node_port | node_host | node_port1 | node_host1 | hostis_primary | nodeis_primary | nodeis_preferred | node_id | sctp_port | control_port | sctp_port1 | control_port1 | nodeis_central --------------+-----------+-----------+----------------+------------+----------------+----------------+----------------+----------------- -+-------------+-----------+--------------+------------+---------------+---------------- dn_6001_6002 | D | 40000 | 192.**.***.**1 | 45000 | 192.**.**.**2 | t | f | f | 1644780306 | 40002 | 40003 | 45002 | 45003 | f dn_6003_6004 | D | 40000 | 192.**.**.**2 | 45000 | 192.**.**.**3 | t | f | f | -966646068 | 40002 | 40003 | 45002 | 45003 | f dn_6005_6006 | D | 40000 | 192.**.**.**3 | 45000 | 192.**.***.**1 | t | f | f | 868850011 | 40002 | 40003 | 45002 | 45003 | f cn_5001 | C | 8000 | 192.**.***.**1 | 8000 | 192.**.***.**1 | t | f | f | 1120683504 | 8002 | 8003 | 0 | 0 | f cn_5002 | C | 8000 | 192.**.**.**2 | 8000 | 192.**.**.**2 | t | f | f | -1736975100 | 8002 | 8003 | 0 | 0 | f cn_5003 | C | 8000 | localhost | 8000 | localhost | t | f | f | -125853378 | 8002 | 8003 | 0 | 0 | t (6 rows)
  • vacuum_cost_delay 参数说明:指定开销超过vacuum_cost_limit的值时进程将进入休眠的时间长度。 参数类型:USERSET 取值范围:整型,0~100,单位为毫秒(ms)。正数值表示打开基于开销的清理延迟特性;0表示关闭基于开销的清理延迟特性。 默认值:0 许多系统上,休眠的有效分辨率是10毫秒。因此把vacuum_cost_delay设置为一个不是10的整数倍的数值与将它设置为10的整数倍作用相同。 此参数一般设置较小,常见的设置是10或20毫秒。
  • 返回值 SQL_SUCCESS:表示调用正确。 SQL_SUCCESS_WITH_INFO:表示会有一些警告信息。 SQL_NEED_DATA:表示在执行SQL语句前没有提供足够的参数。 SQL_ERROR:表示比较严重的错误,如:内存分配失败、建立连接失败等。 SQL_NO_DATA:表示SQL语句不返回结果集。 SQL_INVALID_HANDLE:表示调用无效句柄。其他API的返回值同理。 SQL_STILL_EXECUTING:表示语句正在执行。
  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 --获取字符串的长度 SELECT DBMS_LOB.GETLENGTH('12345678'); DECLARE myraw RAW(100); amount INTEGER :=2; buffer INTEGER :=1; begin DBMS_LOB.READ('123456789012345',amount,buffer,myraw); dbms_output.put_line(myraw); end; / CREATE TABLE blob_Table (t1 blob) DISTRIBUTE BY REPLICATION; CREATE TABLE blob_Table_bak (t2 blob) DISTRIBUTE BY REPLICATION; INSERT INTO blob_Table VALUES('abcdef'); INSERT INTO blob_Table_bak VALUES('22222'); DECLARE str varchar2(100) := 'abcdef'; source raw(100); dest blob; copyto blob; amount int; PSV_SQL varchar2(100); PSV_SQL1 varchar2(100); a int :=1; len int; BEGIN source := utl_raw.cast_to_raw(str); amount := utl_raw.length(source); PSV_SQL :='select * from blob_Table for update'; PSV_SQL1 := 'select * from blob_Table_bak for update'; EXECUTE IMMEDIATE PSV_SQL into dest; EXECUTE IMMEDIATE PSV_SQL1 into copyto; DBMS_LOB.WRITE(dest, amount, 1, source); DBMS_LOB.WRITEAPPEND(dest, amount, source); DBMS_LOB.ERASE(dest, a, 1); DBMS_OUTPUT.PUT_LINE(a); DBMS_LOB.COPY(copyto, dest, amount, 10, 1); DBMS_LOB.CLOSE(dest); RETURN; END; / --删除表 DROP TABLE blob_Table; DROP TABLE blob_Table_bak;
  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 BEGIN FOR ROW_TRANS IN SELECT first_name FROM staffs LOOP DBMS_OUTPUT.PUT_LINE (ROW_TRANS.first_name ); END LOOP; END; / --创建表 CREATE TABLE integerTable1( A INTEGER) DISTRIBUTE BY hash(A); CREATE TABLE integerTable2( B INTEGER) DISTRIBUTE BY hash(B); INSERT INTO integerTable2 VALUES(2); --多游标共享游标属性的标量 DECLARE CURSOR C1 IS SELECT A FROM integerTable1;--声明游标 CURSOR C2 IS SELECT B FROM integerTable2; PI_A INTEGER; PI_B INTEGER; BEGIN OPEN C1;--打开游标 OPEN C2; FETCH C1 INTO PI_A; ---- C1%FOUND 和 C2%FOUND 值为 FALSE FETCH C2 INTO PI_B; ---- C1%FOUND 和 C2%FOUND 的值都为 TRUE --判断游标状态 IF C1%FOUND THEN IF C2%FOUND THEN DBMS_OUTPUT.PUT_LINE('Dual cursor share paremeter.'); END IF; END IF; CLOSE C1;--关闭游标 CLOSE C2; END; / --删除临时表 DROP TABLE integerTable1; DROP TABLE integerTable2;
  • PG_STATIO_USER_TABLES PG_STATIO_USER_TABLES视图显示命名空间中所有用户关系表的IO状态信息。 表1 PG_STATIO_USER_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表索引命中缓冲区数(如果存在)。 父主题: 系统视图
  • PV_TOTAL_MEMORY_DETAIL PV_TOTAL_MEMORY_DETAIL视图统计当前数据库节点使用内存的信息,单位为MB。 表1 PV_TOTAL_MEMORY_DETAIL字段 名称 类型 描述 nodename text 节点名称。 memorytype text 内存类型,包括以下几种: max_process_memory:GaussDB(DWS)集群实例所占用的内存大小。 process_used_memory:GaussDB(DWS)进程所使用的内存大小。 max_dynamic_memory:最大动态内存。 dynamic_used_memory:已使用的动态内存。 dynamic_peak_memory:内存的动态峰值。 dynamic_used_shrctx:最大动态共享内存上下文。 dynamic_peak_shrctx:共享内存上下文的动态峰值。 max_shared_memory:最大共享内存。 shared_used_memory:已使用的共享内存。 max_cstore_memory:列存所允许使用的最大内存。 cstore_used_memory:列存已使用的内存大小。 max_sctpcomm_memory:通信库所允许使用的最大内存。 sctpcomm_used_memory:通信库已使用的内存大小。 sctpcomm_peak_memory:通信库的内存峰值。 other_used_memory:其他已使用的内存大小。 gpu_max_dynamic_memory:GPU内存最大值。 gpu_dynamic_used_memory:当前GPU可用内存和当前临时GPU内存之和。 gpu_dynamic_peak_memory:GPU内存使用的最大内存。 pooler_conn_memory:pooler连接占用内存大小。 pooler_freeconn_memory:pooler空闲连接占用的内存大小。 storage_compress_memory:列存压缩和解压缩使用的内存大小。 udf_reserved_memory:为UDF Worker进程预留的内存大小。 mmap_used_memory:mmap使用的内存大小。 memorymbytes integer 内存类型分配内存的大小。 父主题: 系统视图
  • dynamic_library_path 参数说明:设置数据查找动态加载的共享库文件的路径。当需要打开一个可以动态装载的模块并且在CREATE FUNCTION或LOAD命令里面声明的名字没有目录部分时,系统将搜索这个目录以查找声明的文件。 用于dynamic_library_path的数值必须是一个冒号分隔(Windows下是分号分隔)的绝对路径列表。当一个路径名字以特殊变量$libdir为开头时,会替换为GaussDB(DWS)发布提供的模块安装路径。例如: 1 dynamic_library_path = '/usr/local/lib/postgresql:/opt/testgs/lib:$libdir' 参数类型:SUSET 取值范围:字符串 设置为空字符串,表示关闭自动路径搜索。 默认值:$libdir
  • PG_STATIO_USER_INDEXES PG_STATIO_USER_INDEXES视图显示命名空间中所有用户关系表索引的IO状态信息。 表1 PG_STATIO_USER_INDEXES字段 名称 类型 描述 relid oid 索引的表的OID。 indexrelid oid 该索引的OID。 schemaname name 该索引的模式名。 relname name 该索引的表名。 indexrelname name 索引名称。 idx_blks_read bigint 从索引中读取的磁盘块数。 idx_blks_hit bigint 索引命中缓冲区数。 父主题: 系统视图
  • 返回值 SQL_SUCCESS:表示调用正确。 SQL_SUCCESS_WITH_INFO:表示会有一些警告信息。 SQL_NEED_DATA:在执行SQL语句前没有提供足够的参数。 SQL_ERROR:表示比较严重的错误,如:内存分配失败、建立连接失败等。 SQL_INVALID_HANDLE:表示调用无效句柄。其他API的返回值同理。 SQL_STILL_EXECUTING:表示语句正在执行。 SQL_NO_DATA:表示SQL语句不返回结果集。
  • PG_USER_STATUS PG_USER_STATUS系统表提供了访问数据库用户的状态。需要有系统管理员权限才可以访问此系统表 表1 PG_USER_STATUS字段 名称 类型 描述 roloid oid 角色的标识。 failcount integer 尝试失败次数。 locktime timestamp with time zone 角色被锁定的时间点。 rolstatus smallint 角色的状态。 0:正常状态。 1:由于登录失败次数超过阈值被锁定了一定的时间。 2:被管理员锁定。 permspace bigint 角色在当前实例上已经使用的永久表存储空间大小。 tempspace bigint 角色在当前实例上已经使用的临时表存储空间大小。 父主题: 系统表
  • 查看GUC参数 GaussDB(DWS)的GUC参数影响数据库的系统行为,用户可根据业务场景和数据量查看并调整GUC参数取值。 查看GUC参数方式一:集群创建成功后,用户可在GaussDB(DWS) 管理控制台上查看常用的数据库参数。 查看GUC参数方式二:成功连接集群后,通过SQL命令的方式查看数据库GUC参数。 使用SHOW命令。 使用如下命令查看单个参数: 1 SHOW server_version; server_version显示数据库版本信息的参数。 使用如下命令查看所有参数: 1 SHOW ALL; 使用pg_settings视图。 使用如下命令查看单个参数: 1 SELECT * FROM pg_settings WHERE NAME='server_version'; 使用如下命令查看所有参数: 1 SELECT * FROM pg_settings; 父主题: GUC参数
  • FORALL批量查询语句 语法图 图5 forall::= 变量index会自动定义为integer类型并且只在此循环里存在。index的取值介于low_bound和upper_bound之间。 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 CREATE TABLE hdfs_t1 ( title NUMBER(6), did VARCHAR2(20), data_peroid VARCHAR2(25), kind VARCHAR2(25), interval VARCHAR2(20), time DATE, isModified VARCHAR2(10) ) DISTRIBUTE BY hash(did); INSERT INTO hdfs_t1 VALUES( 8, 'Donald', 'OConnell', 'DOCONNEL', '650.507.9833', to_date('21-06-1999', 'dd-mm-yyyy'), 'SH_CLERK' ); CREATE OR REPLACE PROCEDURE proc_forall() AS BEGIN FORALL i IN 100..120 insert into hdfs_t1(title) values(i); END; / --调用函数 CALL proc_forall(); --查询存储过程调用结果 SELECT * FROM hdfs_t1 WHERE title BETWEEN 100 AND 120; --删除存储过程和表 DROP PROCEDURE proc_forall; DROP TABLE hdfs_t1;
  • FOR_LOOP(integer变量)语句 语法图 图3 for_loop::= 变量name会自动定义为integer类型并且只在此循环里存在。变量name介于lower_bound和upper_bound之间。 当使用REVERSE关键字时,lower_bound必须大于等于upper_bound,否则循环体不会被执行。 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 --从0到5进行循环 CREATE OR REPLACE PROCEDURE proc_for_loop() AS BEGIN FOR I IN 0..5 LOOP DBMS_OUTPUT.PUT_LINE('It is '||to_char(I) || ' time;') ; END LOOP; END; / --调用函数 CALL proc_for_loop(); --删除存储过程 DROP PROCEDURE proc_for_loop;
  • FOR_LOOP查询语句 语法图 图4 for_loop_query::= 变量target会自动定义,类型和query的查询结果的类型一致,并且只在此循环中有效。target的取值就是query的查询结果。 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 --循环输出查询结果。 CREATE OR REPLACE PROCEDURE proc_for_loop_query() AS record VARCHAR2(50); BEGIN FOR record IN SELECT spcname FROM pg_tablespace LOOP dbms_output.put_line(record); END LOOP; END; / --调用函数 CALL proc_for_loop_query(); --删除存储过程 DROP PROCEDURE proc_for_loop_query;
  • 参数 表1 SQLSetStmtAttr参数 关键字 参数说明 StatementtHandle 语句句柄。 Attribute 需设置的属性。 ValuePtr 指向对应Attribute的值。依赖于Attribute的值,ValuePtr可能是32位无符号整型值,或指向以空结束的字符串,二进制缓冲区,或者驱动定义值。注意,如果ValuePtr参数是驱动程序指定值。ValuePtr可能是有符号的整数。 StringLength 如果ValuePtr指向字符串或二进制缓冲区,这个参数是*ValuePtr长度,如果ValuePtr指向整型,忽略StringLength。
  • 原型 1 2 3 4 SQLRETURN SQLSetStmtAttr(SQLHSTMT StatementHandle SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength);
共100000条