华为云用户手册

  • OPEN FOR 动态查询语句还可以使用OPEN FOR打开动态游标来执行。 语法参见图3。 图3 open_for::= 参数说明: cursor_name:要打开的游标名。 dynamic_string:动态查询语句。 USING value:在dynamic_string中存在占位符时使用。 游标的使用请参考游标。 示例 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637 gaussdb=# CREATE SCHEMA hr;gaussdb=# SET CURRENT_SCHEMA = hr;gaussdb=# DROP TABLE IF EXISTS staffs; gaussdb=# CREATE TABLE staffs ( section_id NUMBER, first_name VARCHAR2, phone_number VARCHAR2, salary NUMBER );gaussdb=# INSERT INTO staffs VALUES (30, 'mike', '13567829252', 5800);gaussdb=# INSERT INTO staffs VALUES (40, 'john', '17896354637', 4000);gaussdb=# DECLARE name VARCHAR2(20); phone_number VARCHAR2(20); salary NUMBER(8,2); sqlstr VARCHAR2(1024); TYPE app_ref_cur_type IS REF CURSOR; --定义游标类型 my_cur app_ref_cur_type; --定义游标变量 BEGIN sqlstr := 'select first_name,phone_number,salary from hr.staffs where section_id = :1'; OPEN my_cur FOR sqlstr USING '30'; --打开游标, using是可选的 FETCH my_cur INTO name, phone_number, salary; --获取数据 WHILE my_cur%FOUND LOOP dbe_output.print_line(name||'#'||phone_number||'#'||salary); FETCH my_cur INTO name, phone_number, salary; END LOOP; CLOSE my_cur; --关闭游标END;/mike#13567829252#5800.00ANONYMOUS BLOCK EXECUTEgaussdb=# DROP TABLE staffs;
  • EXECUTE IMMEDIATE 语法图请参见图1。 图1 EXECUTE IMMEDIATE dynamic_select_clause::= using_clause子句的语法图参见图2。 图2 using_clause::= 对以上语法格式的解释如下: define_variable,用于指定存放查询结果的变量。 USING IN bind_argument,用于指定存放传递给动态SQL值的变量,即在dynamic_select_string中存在占位符时使用。 USING OUT bind_argument,用于指定存放动态SQL返回值的变量。 查询语句中,into和out不能同时存在; 占位符命名以“:”开始,后面可跟数字、字符或字符串(不能使用带引号的数字、字符或字符串),与USING子句的bind_argument一一对应; bind_argument只能是值、变量或表达式,不能是表名、列名、数据类型等数据库对象,即不支持使用bind_argument为动态SQL语句传递模式对象。如果存储过程需要通过声明参数传递数据库对象来构造动态SQL语句(常见于执行DDL语句时),建议采用连接运算符“||”拼接dynamic_select_clause; 动态PL/SQL块允许出现重复的占位符,即相同占位符只能与USING子句的一个bind_argument按位置对应。当设置guc参数behavior_compat_options值为dynamic_sql_compat时,会按照占位符的顺序依次匹配USING子句bind_argument,重复的占位符不会再识别为同一个占位符。 IMMEDIATE关键字仅用作语法兼容,无实际意义。 示例 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839404142434445464748 gaussdb=# DROP SCHEMA IF EXISTS hr CASCADE;gaussdb=# CREATE SCHEMA hr;gaussdb=# SET CURRENT_SCHEMA = hr;gaussdb=# CREATE TABLE staffs ( staff_id NUMBER, first_name VARCHAR2, salary NUMBER);gaussdb=# INSERT INTO staffs VALUES (200, 'mike', 5800);gaussdb=# INSERT INTO staffs VALUES (201, 'lily', 3000);gaussdb=# INSERT INTO staffs VALUES (202, 'john', 4400);--从动态语句检索值(INTO 子句):gaussdb=# DECLARE staff_count VARCHAR2(20);BEGIN EXECUTE IMMEDIATE 'select count(*) from hr.staffs' INTO staff_count; dbe_output.print_line(staff_count);END;/3ANONYMOUS BLOCK EXECUTE--传递并检索值(INTO子句用在USING子句前):gaussdb=# CREATE OR REPLACE PROCEDURE dynamic_procAS staff_id NUMBER(6) := 200; first_name VARCHAR2(20); salary NUMBER(8,2);BEGIN EXECUTE IMMEDIATE 'select first_name, salary from hr.staffs where staff_id = :1' INTO first_name, salary USING IN staff_id; dbe_output.print_line(first_name || ' ' || salary);END;/CREATE PROCEDURE--调用存储过程gaussdb=# CALL dynamic_proc();mike 5800.00 dynamic_proc --------------(1 row)--删除存储过程gaussdb=# DROP PROCEDURE dynamic_proc;
  • 示例 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031 --创建存储过程proc_add。gaussdb=# CREATE OR REPLACE PROCEDURE proc_add( param1 in INTEGER, param2 out INTEGER, param3 in INTEGER)ASBEGIN param2:= param1 + param3;END;/gaussdb=# DECLARE input1 INTEGER:=1; input2 INTEGER:=2; statement VARCHAR2(200); param2 INTEGER;BEGIN --声明调用语句 statement := 'call proc_add(:col_1, :col_2, :col_3)'; --执行语句 EXECUTE IMMEDIATE statement USING IN input1, OUT param2, IN input2; dbe_output.print_line('result is: '||to_char(param2));END;/result is: 3ANONYMOUS BLOCK EXECUTE--删除存储过程gaussdb=# DROP PROCEDURE proc_add;
  • 行转列与列转行 行转列 --建表并插入数据。gaussdb=# CREATE TABLE test_p2(id INT, class VARCHAR(20), score INT);gaussdb=# INSERT INTO test_p2 VALUES (1,'math',64), (1,'english',78);gaussdb=# INSERT INTO test_p2 VALUES (2,'math',98), (2,'english',82);gaussdb=# INSERT INTO test_p2 VALUES (3,'math',68), (3,'english',59);gaussdb=# SELECT * FROM test_p2; id | class | score ----+---------+------- 3 | math | 68 3 | english | 59 1 | math | 64 1 | english | 78 2 | math | 98 2 | english | 82(6 rows)--行转列。gaussdb=# SELECT * FROM test_p2 PIVOT(MAX(score) FOR class IN('math','english')); id | 'math' | 'english' ----+--------+----------- 3 | 68 | 59 1 | 64 | 78 2 | 98 | 82(3 rows)--删除。gaussdb=# DROP TABLE test_p2; 列转行 --建表并插入数据。gaussdb=# CREATE TABLE test_p1(id INT, math INT, english INT);gaussdb=# INSERT INTO test_p1 VALUES (1,84,78), (2,98,82), (3,68,59);gaussdb=# SELECT * FROM test_p1; id | math | english ----+------+--------- 3 | 68 | 59 1 | 84 | 78 2 | 98 | 82(3 rows)--列转行。gaussdb=# SELECT * FROM test_p1 UNPIVOT(score FOR class IN(math, english)); id | class | score ----+---------+------- 3 | MATH | 68 3 | ENGLISH | 59 1 | MATH | 84 1 | ENGLISH | 78 2 | MATH | 98 2 | ENGLISH | 82(6 rows)--删除。gaussdb=# DROP TABLE test_p1; 父主题: SELECT
  • 语法格式 1 MOVE [ direction [ FROM | IN ] ] cursor_name; 其中direction子句为可选参数。 1 2 3 4 5 6 7 8 91011121314 NEXT | PRIOR | FIRST | LAST | ABSOLUTE count | RELATIVE count | count | ALL | FORWARD | FORWARD count | FORWARD ALL | BACKWARD | BACKWARD count | BACKWARD ALL
  • 示例 1 2 3 4 5 6 7 8 91011121314151617181920212223242526 --建表并插入数据。gaussdb=# CREATE TABLE tbl_test(c1 int);gaussdb=# INSERT INTO tbl_test VALUES (generate_series(1,20));--建立一个名为cursor1的游标。gaussdb=# BEGIN;gaussdb=# CURSOR cursor1 FOR SELECT * FROM tbl_test ORDER BY 1;--使用MOVE命令使游标向后移动5行,不返回结果。gaussdb=# MOVE FORWARD 5 FROM cursor1;MOVE 5--使用FETCH命令检索两行数据。gaussdb=# FETCH FORWARD 2 FROM cursor1; c1 ---- 6 7(2 rows)--关闭游标并结束事务。gaussdb=# CLOSE cursor1;gaussdb=# END;--删除。gaussdb=# DROP TABLE tbl_test;
  • 注意事项 TIMECAPSULE TABLE语句的用法主要分为两大类:闪回旧版本数据和从回收站中闪回。 TO TIMECAPSULE和TO CS N能够将表闪回到过去的某个版本,当前仅支持Ustore存储引擎。 回收站记录了DROP和TRUNCATE的对象数据。TO BEFORE DROP和TO BEFORE TRUNCATE就是从回收站中闪回,当前支持Ustore以及Astore存储引擎。 不支持闪回表的对象类型:系统表、DFS表、全局临时表、本地临时表、UN LOG GED表、序列表、hash bucket表、密态表。 不支持含有自定义类型表的闪回。 开启闪回后,回收站里的表可以进行表级备份,无法进行表级恢复。 闪回点和当前点之间,执行过修改表结构或影响物理存储的语句(DDL、DCL、VACUUM FULL),则闪回失败。 执行闪回删除需要用户具有如下权限:用户必须具有垃圾对象所在Schema的CREATE和USAGE权限,并且用户必须是Schema的所有者或者是垃圾对象的所有者。 执行闪回TRUNCATE需要用户具有如下权限:用户必须具有垃圾对象所在SCHEMA的CREATE和USAGE权限,并且用户必须是Schema的所有者或者是垃圾对象的所有者,另外用户必须具有垃圾对象的TRUNCATE权限。 不适用闪回DROP/TRUNCATE功能的场景或表: 回收站关闭场景:enable_recyclebin = off。 系统处于维护态(xc_maintenance_mode = on)或从不支持的基线版本升级到支持的版本的升级场景。 多对象删除场景:DROP/TRUNCATE TABLE命令同时指定多个对象。 系统表、DFS表、全局临时表、本地临时表、UNLOGGED表、序列表、hash bucket表、密态表。 回收站对象被清理后无法闪回DROP/TRUNCATE,recyclebin_retention_time参数用于设置回收站对象保留时间。 不支持扩缩容场景:扩容重分布时会强制将回收站中的数据清空,扩容期间,DROP的对象不会放入回收站。 回收站对象禁止DML、DCL、DDL等写操作,不支持DQL查询操作。 TRUNCATE表和闪回TRUNCATE操作之间,执行过修改表结构或影响物理文件的语句(DDL、DCL、VACUUM FULL、增加/删除/切割/合成等分区操作),闪回失败。 整表删除或截断时,分区会随着整表放入回收站,单个删除的分区不支持放入回收站,避免破坏数据一致性。 如果有在线索引残留(存在未创建的节点,在该节点上搜索不到该索引),DROP表时会报错,需要清理残留数据才能DROP成功,将对象放入回收站。 如果表依赖的对象为外部对象(如表列为复合类型、自定义类型等),则采用物理删除,不将表放入回收站。 DROP闪回约束 可以指定原始用户指定的表的名称,或对象删除时数据库分配的系统生成名称。 回收站中系统生成的对象名称是唯一的。因此,如果指定系统生成名称,那么数据库检索指定的对象。使用“SELECT * FROM gs_recyclebin;”语句查看回收站中的内容。 如果指定了用户指定的名称,且回收站中包含多个该名称的对象,那么数据库检索回收站中最近移动的对象。如果需要检索更早版本的表,请按以下步骤执行: 指定需要检索的表的系统生成名称。 执行TIMECAPSULE TABLE ... TO BEFORE DROP语句,直到找到要检索的表。 恢复DROP表时,只恢复基表名,其他子对象名均保持回收站对象名。用户可根据需要,执行DDL命令手工调整子对象名。 如果表存在缺省值引用序列和自定义函数,那么闪回DROP表成功但不会恢复缺省值。 如果表存在视图引用,DROP表时需要级联删除视图,那么闪回DROP表成功但不会恢复视图。 回收站对象不支持DML、DCL、DDL等写操作,不支持DQL查询操作(后续支持)。 recyclebin_retention_time配置参数用于设置回收站对象保留时间,超过该时间的回收站对象将被自动清理。 TRUNCATE闪回约束 TRUNCATE闪回后,统计信息无变化,仍显示为0,可以在业务低峰期(降低性能影响)时候手动ANALYZE来修正统计信息。 RENAME TO仅支持DROP闪回操作为检索表指定新名称,不支持TRUNCATE闪回。 TRUNCATE闪回不能跨越影响表结构或物理存储的语句,否则会报错。即闪回点和当前点之间,如果执行过修改表结构或影响物理存储的语句(DDL、DCL、VACUUM FULL、增加/删除/切割/合成等分区操作),则闪回失败。执行过DDL的表进行闪回操作报错:“ERROR:The table definition of %s has been changed.”。涉及namespace、表名改变等操作的DDL执行闪回操作报错:“ERROR: recycle object %s desired does not exist.”。
  • 参数说明 schema 指定模式包含的表。如果缺省,则为当前模式。 table_name 指定表名。 TO CSN 指定要返回表的时间点对应的事务提交序列号(CSN)。expr必须计算一个数字,代表有效的CSN。 说明:GTM-Free场景各节点使用本地CSN,没有全局统一CSN号,暂不支持使用TO CSN方式进行闪回操作。 TO TIMESTAMP 指定要返回表的时间点对应的时间戳。expr必须计算一个过去有效的时间戳(使用TO_TIMESTAMP函数将字符串转换为时间类型)。表将被闪回到指定时间戳大约3秒内的时间点。 说明:闪回点过旧时,因旧版本被回收导致无法获取旧版本,会导致闪回失败并报错:Restore point too old。 TO BEFORE DROP 使用这个子句检索回收站中已删除的表及其子对象。 RENAME TO 为从回收站中检索的表指定一个新名称。 TO BEFORE TRUNCATE 闪回到TRUNCATE之前。
  • 示例 闪回到某个时间点 需要设置undo_retention_time参数,用于设置旧版本undo的保留时间。 参数使用请联系管理员处理。 --建表并插入数据。gaussdb=# CREATE TABLE tbl_test(c1 int, c2 int) with(storage_type = ustore) DISTRIBUTE BY REPLICATION;gaussdb=# INSERT INTO tbl_test VALUES (1,1),(2,2),(3,3);--查询当前时间和全局所有节点上的next_csn。gaussdb=# SELECT now(); now ------------------------------- 2023-11-27 17:06:34.840698+08(1 row)gaussdb=# SELECT int8in(xidout(next_csn)) FROM gs_get_next_xid_csn(); int8in -------- 25391 25391 25391 25391 25391 25391(6 row)--修改数据。gaussdb=# UPDATE tbl_test SET c1=111, c2=222 WHERE c1=1;--查询数据,并将数据闪回至UPDATE之前。gaussdb=# SELECT * FROM tbl_test; c1 | c2 -----+----- 111 | 222 2 | 2 3 | 3(3 rows)gaussdb=# TIMECAPSULE table tbl_test TO TIMESTAMP to_timestamp('2023-11-27 17:06:34.840698','YYYY-MM-DD HH24:MI:SS.FF');--也可使使用如下SQL。gaussdb=# TIMECAPSULE table tbl_test TO CSN 25391;gaussdb=# SELECT * FROM tbl_test; c1 | c2 ----+---- 2 | 2 3 | 3 1 | 1(3 rows)--删除。gaussdb=# DROP TABLE tbl_test PURGE; 从回收站中闪回数据 前提条件: 开启enable_recyclebin参数,启用回收站,参数使用请联系管理员处理。 recyclebin_retention_time参数用于设置回收站对象保留时间,超过该时间的回收站对象将被自动清理,参数使用请联系管理员处理。 --建表并插入数据。gaussdb=# CREATE TABLE tbl_test1(c1 int, c2 varchar(10))with(storage_type = ustore);gaussdb=# INSERT INTO tbl_test1 VALUES (1,'AAA'),(2,'BBB');--删除表。gaussdb=# DROP TABLE tbl_test1;--闪回至表删除之前。gaussdb=# TIMECAPSULE TABLE tbl_test1 TO BEFORE DROP;--查询数据。gaussdb=# SELECT * FROM tbl_test1; c1 | c2 ----+----- 1 | AAA 2 | BBB(2 rows)--删除表(添加PURGE参数,级联删除回收站该表数据)。gaussdb=# DROP TABLE tbl_test1 PURGE;
  • 数据类型转换 数据库中有些数据类型间允许进行隐式类型转换(例如赋值、函数调用的参数等)、有些数据类型间不允许进行隐式数据类型转换(例如INT和复合类型),可尝试使用 GaussDB 提供的类型转换函数,例如CAST进行数据类型强转。 GaussDB数据库 常见的隐式类型转换如表1所示。 GaussDB支持的DATE的效限范围是:公元前4713年到公元294276年。 表1 隐式类型转换表 原始数据类型 目标数据类型 备注 CHAR VARCHAR2 - CHAR NUMBER 原数据必须由数字组成。 CHAR DATE 原数据不能超出合法日期范围。 CHAR RAW - CHAR CLOB - VARCHAR2 CHAR - VARCHAR2 NUMBER 原数据必须由数字组成。 VARCHAR2 DATE 原数据不能超出合法日期范围。 VARCHAR2 CLOB - NUMBER CHAR - NUMBER VARCHAR2 - DATE CHAR - DATE VARCHAR2 - RAW CHAR - RAW VARCHAR2 - CLOB CHAR - CLOB VARCHAR2 - CLOB NUMBER 原数据必须由数字组成。 INT4 CHAR - 父主题: 存储过程
  • 语法 语法请参见图1。 图1 noselect::= using_clause子句的语法参见图2。 图2 using_clause::= 对以上语法格式的解释如下: USING IN bind_argument用于指定存放传递给动态SQL值的变量,在dynamic_noselect_string中存在占位符时使用,即动态SQL语句执行时,bind_argument将替换相对应的占位符。要注意的是,bind_argument只能是值、变量或表达式,不能是表名、列名、数据类型等数据库对象。如果存储过程需要通过声明参数传递数据库对象来构造动态SQL语句(常见于执行DDL语句时),建议采用连接运算符“||”拼接dynamic_select_clause。另外,动态语句允许出现重复的占位符,相同占位符只能与唯一一个bind_argument按位置一一对应。当设置guc参数behavior_compat_options值为dynamic_sql_compat时,会按照占位符的顺序依次匹配USING子句bind_argument,重复的占位符不会再识别为同一个占位符(占位符名不能使用带引号的数字、字符或字符串)。
  • 示例 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839 --创建表gaussdb=# CREATE TABLE sections_t1( section NUMBER(4) , section_name VARCHAR2(30), manager_id NUMBER(6), place_id NUMBER(4) )DISTRIBUTE BY hash(manager_id);--声明变量gaussdb=# DECLARE section NUMBER(4) := 280; section_name VARCHAR2(30) := 'Info support'; manager_id NUMBER(6) := 103; place_id NUMBER(4) := 1400; new_colname VARCHAR2(10) := 'sec_name';BEGIN --执行查询 EXECUTE IMMEDIATE 'insert into sections_t1 values(:1, :2, :3, :4)' USING section, section_name, manager_id,place_id; --执行查询(重复占位符) EXECUTE IMMEDIATE 'insert into sections_t1 values(:1, :2, :3, :1)' USING section, section_name, manager_id; --执行ALTER语句(建议采用“||”拼接数据库对象构造DDL语句) EXECUTE IMMEDIATE 'alter table sections_t1 rename section_name to ' || new_colname;END; /ANONYMOUS BLOCK EXECUTE--查询数据gaussdb=# SELECT * FROM sections_t1; section | sec_name | manager_id | place_id ---------+--------------+------------+---------- 280 | Info support | 103 | 1400 280 | Info support | 103 | 280(2 rows)--删除表gaussdb=# DROP TABLE sections_t1;
  • 行表达式函数白名单 表1 为数据对象增加或修改策略ILM所支持的行表达式函数白名单 func_oid_value func_name 38 int2in 39 int2out 42 int4in 43 int4out 46 textin 47 textout 56 boollt 57 boolgt 60 booleq 61 chareq 63 int2eq 64 int2lt 65 int4eq 66 int4lt 67 texteq 70 charne 72 charle 73 chargt 74 charge 77 int4 78 char 84 boolne 111 numeric_fac 141 int4mul 144 int4ne 145 int2ne 146 int2gt 147 int4gt 148 int2le 149 int4le 150 int4ge 151 int2ge 152 int2mul 153 int2div 154 int4div 155 int2mod 156 int4mod 157 textne 158 int24eq 159 int42eq 160 int24lt 161 int42lt 162 int24gt 163 int42gt 164 int24ne 165 int42ne 166 int24le 167 int42le 168 int24ge 169 int42ge 170 int24mul 171 int42mul 172 int24div 173 int42div 176 int2pl 177 int4pl 178 int24pl 179 int42pl 180 int2mi 181 int4mi 182 int24mi 183 int42mi 202 float4mul 203 float4div 204 float4pl 205 float4mi 206 float4um 207 float4abs 209 float4larger 211 float4smaller 212 int4um 213 int2um 216 float8mul 217 float8div 218 float8pl 219 float8mi 220 float8um 221 float8abs 223 float8larger 224 float8smaller 228 dround 229 dtrunc 235 float8 236 float4 237 int2 238 int2 244 timepl 245 timemi 248 intinterval 249 tintervalrel 251 abstimeeq 252 abstimene 253 abstimelt 254 abstimegt 255 abstimele 256 abstimege 257 reltimeeq 258 reltimene 259 reltimelt 260 reltimegt 261 reltimele 262 reltimege 263 tintervalsame 264 tintervalct 265 tintervalov 266 tintervalleneq 267 tintervallenne 268 tintervallenlt 269 tintervallengt 270 tintervallenle 271 tintervallenge 273 tintervalend 275 isfinite 279 float48mul 280 float48div 281 float48pl 282 float48mi 283 float84mul 284 float84div 285 float84pl 286 float84mi 287 float4eq 288 float4ne 289 float4lt 290 float4le 291 float4gt 292 float4ge 293 float8eq 294 float8ne 295 float8lt 296 float8le 297 float8gt 298 float8ge 299 float48eq 300 float48ne 301 float48lt 302 float48le 303 float48gt 304 float48ge 305 float84eq 306 float84ne 307 float84lt 308 float84le 309 float84gt 310 float84ge 311 float8 312 float4 313 int4 314 int2 316 float8 317 int4 318 float4 319 int4 350 btint2cmp 351 btint4cmp 354 btfloat4cmp 355 btfloat8cmp 357 btabstimecmp 358 btcharcmp 360 bttextcmp 377 cash_cmp 380 btreltimecmp 381 bttintervalcmp 385 regexp_count 386 regexp_count 387 regexp_count 400 hashtext 432 hash_numeric 449 hashint2 450 hashint4 451 hashfloat4 452 hashfloat8 454 hashchar 458 text_larger 459 text_smaller 461 int8out 462 int8um 463 int8pl 464 int8mi 465 int8mul 466 int8div 467 int8eq 468 int8ne 469 int8lt 470 int8gt 471 int8le 472 int8ge 474 int84eq 475 int84ne 476 int84lt 477 int84gt 478 int84le 479 int84ge 480 int4 481 int8 482 float8 483 int8 630 regexp_instr 631 regexp_instr 632 regexp_instr 633 regexp_instr 634 regexp_instr 652 float4 654 hashint1_numeric 665 hashint2_numeric 667 hashint16 676 mktinterval 682 hashint4_numeric 714 int2 720 octet_length 721 get_byte 722 set_byte 723 get_bit 724 set_bit 740 text_lt 741 text_le 742 text_gt 743 text_ge 754 int8 755 hashint8_numeric 766 int4inc 768 int4larger 769 int4smaller 770 int2larger 771 int2smaller 784 tintervaleq 785 tintervalne 786 tintervallt 787 tintervalgt 788 tintervalle 789 tintervalge 792 btint12cmp 793 btint14cmp 794 btint18cmp 795 btint116cmp 796 btint1numericcmp 797 btint21cmp 798 btint216cmp 799 btint2numericcmp 800 btint41cmp 801 btint416cmp 802 btint4numericcmp 803 btint81cmp 804 btint816cmp 805 btint8numericcmp 837 int82pl 838 int82mi 839 int82mul 840 int82div 841 int28pl 842 btint8cmp 846 cash_mul_flt4 847 cash_div_flt4 848 flt4_mul_cash 849 position 852 int48eq 853 int48ne 854 int48lt 855 int48gt 856 int48le 857 int48ge 860 bpchar 862 int4_mul_cash 863 int2_mul_cash 864 cash_mul_int4 865 cash_div_int4 866 cash_mul_int2 867 cash_div_int2 868 strpos 870 lower 871 upper 877 substr 883 substr 888 cash_eq 889 cash_ne 890 cash_lt 891 cash_le 892 cash_gt 893 cash_ge 894 cash_pl 895 cash_mi 896 cash_mul_flt8 897 cash_div_flt8 898 cashlarger 899 cashsmaller 919 flt8_mul_cash 935 cash_words 936 substring 937 substring 940 mod 941 mod 942 int28mi 943 int28mul 944 char 945 int8mod 947 mod 948 int28div 949 hashint8 1026 timezone 1048 bpchareq 1049 bpcharlt 1050 bpcharle 1051 bpchargt 1052 bpcharge 1053 bpcharne 1063 bpchar_larger 1064 bpchar_smaller 1078 bpcharcmp 1080 hashbpchar 1102 time_lt 1103 time_le 1104 time_gt 1105 time_ge 1106 time_ne 1107 time_cmp 1116 regexp_replace 1117 regexp_replace 1118 regexp_replace 1119 regexp_replace 1145 time_eq 1152 timestamptz_eq 1153 timestamptz_ne 1154 timestamptz_lt 1155 timestamptz_le 1156 timestamptz_ge 1157 timestamptz_gt 1158 to_timestamp 1159 timezone 1162 interval_eq 1163 interval_ne 1164 interval_lt 1165 interval_le 1166 interval_ge 1167 interval_gt 1168 interval_um 1169 interval_pl 1170 interval_mi 1172 date_part 1173 timestamptz 1177 interval 1180 abstime 1188 timestamptz_mi 1194 reltime 1195 timestamptz_smaller 1196 timestamptz_larger 1197 interval_smaller 1198 interval_larger 1199 age 1200 interval 1218 date_trunc 1219 int8inc 1230 int8abs 1236 int8larger 1237 int8smaller 1238 texticregexeq 1239 texticregexne 1246 charlt 1251 int4abs 1253 int2abs 1254 textregexeq 1256 textregexne 1271 overlaps 1273 date_part 1274 int84pl 1275 int84mi 1276 int84mul 1277 int84div 1278 int48pl 1279 int48mi 1280 int48mul 1281 int48div 1282 quote_ident 1283 quote_literal 1289 quote_nullable 1299 now 1304 overlaps 1308 overlaps 1309 overlaps 1310 overlaps 1311 overlaps 1314 timestamptz_cmp 1315 interval_cmp 1316 time 1326 interval_div 1342 round 1343 trunc 1352 timetz_eq 1353 timetz_ne 1354 timetz_lt 1355 timetz_le 1356 timetz_ge 1357 timetz_gt 1358 timetz_cmp 1359 timestamptz 1370 interval 1373 isfinite 1374 octet_length 1375 octet_length 1377 time_larger 1378 time_smaller 1379 timetz_larger 1380 timetz_smaller 1384 date_part 1385 date_part 1389 isfinite 1390 isfinite 1394 abs 1395 abs 1396 abs 1397 abs 1398 abs 1419 time 1481 tinterval 1581 biteq 1582 bitne 1592 bitge 1593 bitgt 1594 bitle 1595 bitlt 1596 bitcmp 1608 degrees 1618 interval_mul 1620 ascii 1621 chr 1622 repeat 1623 similar_escape 1624 mul_d_interval 1633 texticlike 1634 texticnlike 1637 like_escape 1656 bpcharicregexeq 1657 bpcharicregexne 1658 bpcharregexeq 1659 bpcharregexne 1660 bpchariclike 1661 bpcharicnlike 1666 varbiteq 1667 varbitne 1668 varbitge 1669 varbitgt 1670 varbitle 1671 varbitlt 1672 varbitcmp 1673 bitand 1674 bitor 1675 bitxor 1676 bitnot 1677 bitshiftleft 1678 bitshiftright 1679 bitcat 1680 substring 1682 octet_length 1683 bit 1684 int4 1685 bit 1687 varbit 1688 time_hash 1690 time_mi_time 1691 boolle 1692 boolge 1693 btboolcmp 1696 timetz_hash 1697 interval_hash 1698 position 1699 substring 1702 numeric_out 1703 numeric 1704 numeric_abs 1705 abs 1706 sign 1707 round 1709 trunc 1710 trunc 1711 ceil 1712 floor 1718 numeric_eq 1719 numeric_ne 1720 numeric_gt 1721 numeric_ge 1722 numeric_lt 1723 numeric_le 1724 numeric_add 1725 numeric_sub 1726 numeric_mul 1727 numeric_div 1728 mod 1729 numeric_mod 1740 numeric 1742 numeric 1743 numeric 1744 int4 1745 float4 1746 float8 1747 time_pl_interval 1748 time_mi_interval 1749 timetz_pl_interval 1750 timetz_mi_interval 1752 trunc 1753 trunc 1764 numeric_inc 1766 numeric_smaller 1767 numeric_larger 1769 numeric_cmp 1771 numeric_uminus 1781 numeric 1782 numeric 1783 int2 1810 bit_length 1811 bit_length 1812 bit_length 1840 int2_sum 1841 int4_sum 1842 int8_sum 1845 to_ascii 1846 to_ascii 1848 interval_pl_time 1850 int28eq 1851 int28ne 1852 int28lt 1853 int28gt 1854 int28le 1855 int28ge 1856 int82eq 1857 int82ne 1858 int82lt 1859 int82gt 1860 int82le 1861 int82ge 1874 btint161cmp 1875 btint162cmp 1876 btint164cmp 1877 btint168cmp 1878 btnumericint1cmp 1879 btnumericint2cmp 1880 btnumericint4cmp 1881 btnumericint8cmp 1882 btint16cmp 1892 int2and 1893 int2or 1894 int2xor 1895 int2not 1896 int2shl 1897 int2shr 1898 int4and 1899 int4or 1900 int4xor 1901 int4not 1902 int4shl 1903 int4shr 1904 int8and 1905 int8or 1906 int8xor 1907 int8not 1908 int8shl 1909 int8shr 1910 int8up 1911 int2up 1912 int4up 1913 float4up 1914 float8up 1915 numeric_uplus 1946 encode 1961 timestamp 1967 timestamptz 1968 time 1969 timetz 1973 div 1980 numeric_div_trunc 2009 like_escape 2012 substring 2013 substring 2014 position 2020 date_trunc 2021 date_part 2024 timestamp 2025 timestamp 2031 timestamp_mi 2032 timestamp_pl_interval 2033 timestamp_mi_interval 2035 timestamp_smaller 2036 timestamp_larger 2038 timezone 2039 timestamp_hash 2041 overlaps 2042 overlaps 2043 overlaps 2044 overlaps 2045 timestamp_cmp 2046 time 2048 isfinite 2052 timestamp_eq 2053 timestamp_ne 2054 timestamp_lt 2055 timestamp_le 2056 timestamp_ge 2057 timestamp_gt 2058 age 2069 timezone 2070 timezone 2073 substring 2074 substring 2075 bit 2076 int8 2089 to_hex 2090 to_hex 2160 text_pattern_lt 2161 text_pattern_le 2163 text_pattern_ge 2164 text_pattern_gt 2166 bttext_pattern_cmp 2167 ceiling 2174 bpchar_pattern_lt 2175 bpchar_pattern_le 2177 bpchar_pattern_ge 2178 bpchar_pattern_gt 2180 btbpchar_pattern_cmp 2188 btint48cmp 2189 btint84cmp 2190 btint24cmp 2191 btint42cmp 2192 btint28cmp 2193 btint82cmp 2194 btfloat48cmp 2195 btfloat84cmp 2308 ceil 2309 floor 2310 sign 2320 ceiling 2515 booland_statefunc 2516 boolor_statefunc 2547 interval_pl_timetz 2548 interval_pl_timestamp 2557 bool 2558 int4 2765 regexp_split_to_table 2766 regexp_split_to_table 2805 int8inc_float8_float8 2906 timestamptypmodout 2908 timestamptztypmodout 2910 timetypmodout 2912 timetztypmodout 2996 int8_sum_to_int8 3032 get_bit 3033 set_bit 3062 reverse 3167 instr 3168 instr 3169 instr 3170 multiply 3171 multiply 3175 lengthb 3176 lengthb 3177 int8_bool 3178 bool_int8 3180 int2_bool 3181 bool_int2 3182 substring_inner 3183 substring_inner 3226 timestamp_diff 3227 timestamp_diff 3343 int8_mul_cash 3344 cash_mul_int8 3345 cash_div_int8 3822 cash_div_cash 3922 int4range_subdiff 3923 int8range_subdiff 3924 numrange_subdiff 3925 daterange_subdiff 3929 tsrange_subdiff 3930 tstzrange_subdiff 4162 varchar_date 4163 bpchar_date 4164 text_date 4166 int2_text 4167 int4_text 4168 int8_text 4169 float4_text 4170 float8_text 4171 numeric_text 5580 smalldatetime_eq 5581 smalldatetime_ne 5582 smalldatetime_lt 5583 smalldatetime_le 5584 smalldatetime_ge 5585 smalldatetime_gt 5586 smalldatetime_cmp 5587 smalldatetime_hash 5809 b_db_last_day 5810 b_db_last_day 5811 b_db_last_day 5816 b_db_last_day 5858 weekofyear 5859 weekofyear 5860 weekofyear 5861 weekofyear 6407 int16 6408 int2 6409 int16 6410 int4 6411 int16 6412 int8 6413 int16 6414 float8 6415 int16 6416 float4 6419 int16 6420 int16_bool 6421 int16 6422 numeric 6423 int16eq 6424 int16ne 6425 int16lt 6426 int16le 6427 int16gt 6428 int16ge 6429 int16pl 6430 int16mi 6431 int16mul 6432 int16div 6433 numeric 6434 numeric_bool 6438 int21gt 6439 int21le 6440 int21ge 6441 int216eq 6442 int216ne 6443 int216lt 6444 int216gt 6445 int216le 6446 int216ge 6447 int2numericeq 6448 int2numericne 6449 int2numericlt 6450 int2numericgt 6451 int2numericle 6452 int2numericge 6453 int41eq 6454 int41ne 6455 int41lt 6456 int41gt 6457 int41le 6458 int41ge 6459 int416eq 6460 int416ne 6461 int416lt 6462 int416gt 6463 int416le 6464 int416ge 6465 int4numericeq 6466 int4numericne 6467 int4numericlt 6468 int4numericgt 6469 int4numericle 6470 int4numericge 6471 int81eq 6472 int81ne 6473 int81lt 6474 int81gt 6475 int81le 6476 int81ge 6477 int816eq 6478 int816ne 6479 int816lt 6480 int816gt 6481 int816le 6482 int816ge 6483 int8numericeq 6484 int8numericne 6485 int8numericlt 6486 int8numericgt 6487 int8numericle 6488 int8numericge 6539 int21eq 6540 int21ne 6578 b_timestampdiff 6579 b_timestampdiff 6582 b_timestampdiff 6583 b_timestampdiff 6584 b_timestampdiff 6585 b_timestampdiff 6586 b_timestampdiff 6587 b_timestampdiff 6588 b_timestampdiff 6589 b_timestampdiff 6590 b_timestampdiff 6591 b_timestampdiff 6592 b_timestampdiff 6593 b_timestampdiff 6594 b_timestampdiff 6595 b_timestampdiff 6635 int21lt 6814 int12eq 6815 numericint1eq 6853 int168ge 7747 numericint2le 7748 numericint2ge 7749 numericint4eq 7750 numericint4ne 7751 numericint4lt 7752 numericint4gt 7753 numericint4le 7754 numericint4ge 7755 numericint8eq 7756 numericint8ne 7757 numericint8lt 7758 numericint8gt 7759 numericint8le 7760 numericint8ge 7761 int161eq 7762 int161ne 7763 int161lt 8751 int161gt 8752 int161le 8753 int161ge 8754 int162eq 8755 int162ne 8756 int162lt 8757 int162gt 8758 int162le 8759 int162ge 8760 int164eq 8761 int164ne 8762 int164lt 8763 int164gt 8764 int164le 8765 int164ge 8766 int168eq 8767 int168ne 8768 int168lt 8769 int168gt 8770 int168le 9011 smalldatetime_smaller 9012 smalldatetime_larger 9558 int12ne 9559 int12lt 9560 int12gt 9561 int12le 9562 int12ge 9563 int14eq 9564 int14ne 9566 int14lt 9567 int14gt 9568 int14le 9569 int14ge 9573 int18eq 9574 int18ne 9575 int18lt 9576 int18gt 9584 int18le 9585 int18ge 9586 int116eq 9587 int116ne 9588 int116lt 9589 int116gt 9590 int116le 9591 int116ge 9592 int1numericeq 9593 int1numericne 9594 int1numericlt 9595 int1numericgt 9596 int1numericle 9597 int1numericge 9624 numericint1ne 9625 numericint1lt 9626 numericint1gt 9627 numericint1le 9628 numericint1ge 9629 numericint2eq 9630 numericint2ne 9631 numericint2lt 9632 numericint2gt 9910 substring_index 父主题: 附录
  • 注意事项 清除(PURGE)操作支持:表(PURGE TABLE)、索引(PURGE INDEX)、回收站(PURGE RECYCLEBIN)。 执行PURGE操作的权限要求如下: PURGE TABLE:用户必须是表的所有者,且用户必须拥有表所在模式的USAGE权限,当三权分立开关关闭时,系统管理员默认拥有此权限。 PURGE INDEX:用户必须是索引的所有者,用户必须拥有索引所在模式的USAGE权限,当三权分立开关关闭时,系统管理员默认拥有此权限。 PURGE RECYCLEBIN:普通用户只能清理回收站中当前用户拥有的对象,且用户必须拥有对象所在模式的USAGE权限,当三权分立开关关闭时,系统管理员默认可以清理回收站所有对象。
  • 示例 --创建表reason_t1。gaussdb=# CREATE TABLE reason_t1( r_reason_sk integer, r_reason_id character(16), r_reason_desc character(100)) WITH(STORAGE_TYPE = ustore);--创建表reason_t2。gaussdb=# CREATE TABLE reason_t2( r_reason_sk integer, r_reason_id character(16), r_reason_desc character(100)) WITH(STORAGE_TYPE = ustore);-- 对表reason_t1和reason_t2添加索引。gaussdb=# CREATE INDEX idx_t1 on reason_t1(r_reason_id); gaussdb=# CREATE INDEX idx_t2 on reason_t2(r_reason_id); gaussdb=# DROP TABLE reason_t1;gaussdb=# DROP TABLE reason_t2;--查看回收站。gaussdb=# SELECT rcyname,rcyoriginname,rcytablespace FROM GS_RECYCLEBIN; rcyname | rcyoriginname | rcytablespace ----------------------------+---------------+--------------- BIN$31C94EB4207$8001$0==$0 | reason_t1 | 0 BIN$31C94EB420D$8001$0==$0 | idx_t1 | 0 BIN$31C94EB420A$8004$0==$0 | reason_t2 | 0 BIN$31C94EB420E$8004$0==$0 | idx_t2 | 0(4 rows)--PURGE清除表。gaussdb=# PURGE TABLE reason_t1;gaussdb=# SELECT rcyname,rcyoriginname,rcytablespace FROM GS_RECYCLEBIN; rcyname | rcyoriginname | rcytablespace ----------------------------+---------------+--------------- BIN$31C94EB420A$8004$0==$0 | reason_t2 | 0 BIN$31C94EB420E$8004$0==$0 | idx_t2 | 0(2 rows)--PURG清除索引。gaussdb=# PURGE INDEX idx_t2;gaussdb=# SELECT rcyname,rcyoriginname,rcytablespace FROM GS_RECYCLEBIN; rcyname | rcyoriginname | rcytablespace ----------------------------+---------------+--------------- BIN$31C94EB420A$8004$0==$0 | reason_t2 | 0(1 row)--PURGE清除回收站所有对象。gaussdb=# PURGE recyclebin;gaussdb=# SELECT rcyname,rcyoriginname,rcytablespace FROM GS_RECYCLEBIN; rcyname | rcyoriginname | rcytablespace -----------------------+---------------+---------------(0 rows)
  • 语法 动态调用匿名块语法如图1所示。 图1 call_anonymous_block::= using_clause子句的语法如图2所示。 图2 using_clause::= 对以上语法格式的解释如下: 匿名块程序实施部分,以BEGIN语句开始,以END语句停顿,以一个分号结束。 USING [IN|OUT|IN OUT] bind_argument,用于指定存放传递给存储过程参数值的变量。bind_argument前的修饰符与对应参数的修饰符一致。 匿名块中间的输入输出参数使用占位符来指明,要求占位符个数与参数个数相同,并且占位符所对应参数的顺序和USING中参数的顺序一致。 仅支持匿名块中调用SQL语句和存储过程时绑定参数,其余绑定参数场景皆不支持。例如:匿名块中使用表达式以及cursor等、匿名块中嵌套调用动态语句。 不支持匿名块中SELECT INTO语句调用含有出参的FUNCTION/PROCEDURE时,绑定出参。 不支持同一条语句同时使用匿名块内声明的变量和绑定参数。 不支持绑定参数时使用PERFORM关键字调用存储过程。 调用存储过程时,仅支持绑定参数直接作为出入参,不支持表达式形式(如“1+:va”)作为出入参,并且占位符名不能使用带引号的数字、字符或字符串。 IMMEDIATE关键字仅用作语法兼容,无实际意义。 绑定入参类型为refcursor时,存储过程内的修改与入参相互隔离。 打开dynamic_sql_check参数时,占位符个数与参数个数一致时使用同名占位符作为匿名块参数会报错,需修改为不同名参数,详见示例。
  • 示例 gaussdb=# DROP SCHEMA IF EXISTS hr CASCADE;gaussdb=# CREATE SCHEMA hr;CREATE SCHEMAgaussdb=# SET CURRENT_SCHEMA = hr;SETgaussdb=# CREATE TABLE staffs ( staff_id NUMBER, first_name VARCHAR2, salary NUMBER);CREATE TABLEgaussdb=# INSERT INTO staffs VALUES (200, 'mike', 5800);INSERT 0 1gaussdb=# INSERT INTO staffs VALUES (201, 'lily', 3000);INSERT 0 1gaussdb=# INSERT INTO staffs VALUES (202, 'john', 4400);INSERT 0 1--创建重载函数gaussdb=# CREATE OR REPLACE PACKAGE pkg1 IS PROCEDURE plus(var1 in int, var2 int, var3 out int); PROCEDURE plus(var1 in out int);END pkg1;/CREATE PACKAGEgaussdb=# CREATE OR REPLACE PACKAGE BODY pkg1 IS PROCEDURE plus(var1 in int, var2 int, var3 out int) AS BEGIN var3 = var1 + var2 + 1; END; PROCEDURE plus(var1 in out int) AS BEGIN var1 = var1 + 1; END;END pkg1;/CREATE PACKAGE BODY--创建存储过程dynamic_procgaussdb=# CREATE OR REPLACE PROCEDURE dynamic_procAS staff_id NUMBER(6) := 200; first_name VARCHAR2(20); salary NUMBER(8,2);BEGIN --执行匿名块 EXECUTE IMMEDIATE 'begin select first_name, salary into :first_name, :salary from hr.staffs where staff_id= :dno; end;' USING OUT first_name, OUT salary, IN staff_id; dbe_output.print_line(first_name|| ' ' || salary);END;/CREATE PROCEDURE--创建存储过程调用重载函数gaussdb=# CREATE OR REPLACE PROCEDURE dynamic_proc1 AS v_sql VARCHAR2(200); var1 NUMBER(6) := 1; var2 NUMBER(6) := 2; var3 NUMBER(6);BEGIN v_sql := 'begin pkg1.plus(:1, :2, :3); end;'; EXECUTE IMMEDIATE v_sql USING var1, var2, out var3; dbe_output.print_line('var3: ' || var3);END;/CREATE PROCEDURE--调用存储过程gaussdb=# CALL dynamic_proc();mike 5800.00 dynamic_proc --------------(1 row)gaussdb=# CALL dynamic_proc1();var3: 4 dynamic_proc1 ---------------(1 row)--删除存储过程gaussdb=# DROP PROCEDURE dynamic_proc;DROP PROCEDUREgaussdb=# DROP PROCEDURE dynamic_proc1;DROP PROCEDURE--开启dynamic_sql_check时报错示例gaussdb=# SET behavior_compat_options = 'dynamic_sql_check';SETgaussdb=# CREATE OR REPLACE PROCEDURE test_proc_exception001(a out integer, b inout integer, c integer) as BEGIN a := 1; begin b := 1/0; end; EXCEPTION WHEN others THEN b := 2; END;/CREATE PROCEDUREgaussdb=# DECLARE a integer := 1; c integer; BEGIN execute immediate 'begin test_proc_exception001(:1,:2,:1); end;' using in out a, out c, a; END;/ERROR: argnum not match in Dynamic SQL, using args num : 3 , actual sql args num : 2CONTEXT: PL/pgSQL function inline_code_block line 4 at EXECUTE statement--修改同名占位符gaussdb=# DECLARE a integer := 1; c integer; BEGIN execute immediate 'begin test_proc_exception001(:1,:2,:3); end;' using in out a, out c, a; END;/ANONYMOUS BLOCK EXECUTEgaussdb=# DROP PROCEDURE test_proc_exception001;DROP PROCEDURE
  • 功能描述 RELEASE SAVEPOINT删除一个当前事务先前定义的保存点。 把一个保存点删除就令其无法作为回滚点使用,除此之外它没有其它用户可见的行为。它并不能撤销在保存点建立起来之后执行的命令的影响,要撤销那些命令可以使用ROLLBACK TO SAVEPOINT 。当不再需要的时候删除一个保存点可以令系统在事务结束之前提前回收一些资源。 RELEASE SAVEPOINT也删除所有在指定的保存点建立之后的所有保存点。
  • 示例 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839404142434445 --创建SCHEMA。gaussdb=# CREATE SCHEMA tpcds;--创建一个新表。gaussdb=# CREATE TABLE tpcds.table1(a int);--开启事务。gaussdb=# START TRANSACTION;--插入数据。gaussdb=# INSERT INTO tpcds.table1 VALUES (3);--建立保存点。gaussdb=# SAVEPOINT my_savepoint;--插入数据。gaussdb=# INSERT INTO tpcds.table1 VALUES (4);--删除保存点。gaussdb=# RELEASE SAVEPOINT my_savepoint;--查询表的内容,会同时看到3和4。gaussdb=# SELECT * FROM tpcds.table1; a --- 3 4(2 rows)--提交事务。gaussdb=# COMMIT;--再次查询表的内容,会同时看到3和4。gaussdb=# SELECT * FROM tpcds.table1; a --- 3 4(2 rows)--删除表。gaussdb=# DROP TABLE tpcds.table1;--删除SCHEMA。gaussdb=# DROP SCHEMA tpcds CASCADE;
  • 示例 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334 --创建安全标签。gaussdb=# CREATE SECURITY LABEL sec_label 'L1:G4';--创建表。gaussdb=# CREATE TABLE tbl(c1 int, c2 int);--创建用户。gaussdb=# CREATE USER bob WITH PASSWORD '********';--给用户应用安全标签。gaussdb=# SECURITY LABEL ON ROLE bob IS 'sec_label';--给表应用安全标签。gaussdb=# SECURITY LABEL ON TABLE tbl IS 'sec_label';--给表的列应用安全标签。gaussdb=# SECURITY LABEL ON COLUMN tbl.c1 IS 'sec_label';--给用户取消安全标签。gaussdb=# SECURITY LABEL ON ROLE bob IS NULL;--给表取消安全标签。gaussdb=# SECURITY LABEL ON TABLE tbl IS NULL;--给表的列取消安全标签。gaussdb=# SECURITY LABEL ON COLUMN tbl.c1 IS NULL;--删除表tb1。gaussdb=# DROP TABLE tbl;--删除用户bob。gaussdb=# DROP USER bob;--删除已存在的安全标签sec_label。gaussdb=# DROP SECURITY LABEL sec_label;
  • 示例 --建表。gaussdb=# CREATE TABLE test_t2(col1 INT,col2 VARCHAR);gaussdb=# CREATE TABLE test_t3(col1 INT,col2 VARCHAR);--插入多条数据。gaussdb=# INSERT INTO test_t2 (col1, col2) VALUES (10,'AA'),(20,'BB'),(30,'CC');--分页查询,返回第一页,每页显示1行数据。gaussdb=# SELECT * FROM test_t2 ORDER BY col1 ASC LIMIT 1 OFFSET 0;col1 | col2 ------+------ 10 | AA(1 row)--把test_t2中的数据插入到test_t3中。gaussdb=# INSERT INTO test_t3 SELECT * FROM test_t2;--结合FETCH查询,返回第一页,每页显示1行数据。gaussdb=# SELECT * FROM test_t3 ORDER BY col1 ASC OFFSET 0 FETCH FIRST 1 ROWS ONLY; col1 | col2 ------+------ 10 | AA(1 row)--删除表test_t2、test_t3。gaussdb=# DROP TABLE test_t2;gaussdb=# DROP TABLE test_t3;
  • 参数说明 SESSION 声明这个命令只对当前会话起作用。 LOCAL 声明该命令只在当前事务中有效。 role_name 用户名。 取值范围:字符串,数据库中已经存在的用户名。 password 角色的密码。要求符合密码的命名规则。 使用密文密码限制如下: 管理员用户不能使用密文密码切换到其他管理员用户,只能向权限更低用户切换; 使用密文密码通常用于gs_dump、gs_dumpall导出场景,其他场景不建议直接使用密文密码。 DEFAULT 重置会话和当前用户标识符为初始认证的用户名。
  • 参数说明 expression 用于计算或插入结果表指定地点的常量或者表达式。 在一个出现在INSERT顶层的VALUES列表中,expression可以被DEFAULT替换以表示插入目的字段的缺省值。除此以外,当VALUES出现在其他场合的时候是不能使用DEFAULT的。 sort_expression 一个表示如何排序结果行的表达式或者整数常量。 ASC 指定按照升序排列。 DESC 指定按照降序排列。 operator 一个排序操作符。 count 返回的最大行数。 OFFSET start [ ROW | ROWS ] 声明返回的最大行数,而start声明开始返回行之前忽略的行数。 FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY FETCH子句限定返回查询结果从第一行开始的总行数,count的缺省值为1。
  • 语法格式 为当前会话设置会话用户标识符和当前用户标识符。 1 SET [ SESSION | LOCAL ] SESSION AUTHORIZATION role_name PASSWORD 'password'; 重置会话和当前用户标识符为初始认证的用户名。 12 {SET [ SESSION | LOCAL ] SESSION AUTHORIZATION DEFAULT | RESET SESSION AUTHORIZATION};
  • 语法格式 12345 VALUES {( expression [, ...] )} [, ...] [ ORDER BY { sort_expression [ ASC | DESC | USING operator ] } [, ...] ] [ LIMIT { count | ALL } ] [ OFFSET start [ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ];
  • 示例 清理表数据 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536 --创建表reason。gaussdb=# CREATE TABLE reason (r_reason_sk int,r_reason_id varchar(16),r_reason_desc varchar(100));--向表中插入多条记录。gaussdb=# INSERT INTO reason values(1,'AAAAAAAABAAAAAAA','reason 1'), (5,'AAAAAAAABAAAAAAA','reason 2'), (15,'AAAAAAAABAAAAAAA','reason 3'), (25,'AAAAAAAABAAAAAAA','reason 4'), (35,'AAAAAAAABAAAAAAA','reason 5'), (45,'AAAAAAAACAAAAAAA','reason 6');--查看表的信息,大小约为16kBgaussdb=# \d+ List of relations Schema | Name | Type | Owner | Size | Storage | Description --------+--------+-------+-------+-------+----------------------------------+------------- public | reason | table | omm | 16 kB | {orientation=row,compression=no} | (1 row)--使用DELETE语句不带WHERE条件,清空表的数据,并查看表的大小。gaussdb=# DELETE FROM reason;gaussdb=# \d+ List of relations Schema | Name | Type | Owner | Size | Storage | Description --------+--------+-------+-------+-------+----------------------------------+------------- public | reason | table | omm | 16 kB | {orientation=row,compression=no} | (1 row)--使用TRUNCATE清空表reason,并查看表的大小gaussdb=# TRUNCATE TABLE reason;gaussdb=# \d+ List of relations Schema | Name | Type | Owner | Size | Storage | Description --------+--------+-------+-------+---------+----------------------------------+------------- public | reason | table | omm | 0 bytes | {orientation=row,compression=no} | (1 row)--删除表。gaussdb=# DROP TABLE reason; 清理分区表数据。 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829 --创建分区表。gaussdb=# CREATE TABLE reason_p( r_reason_sk integer, r_reason_id character(16), r_reason_desc character(100))PARTITION BY RANGE (r_reason_sk)( partition p_05_before values less than (05), partition p_15 values less than (15), partition p_25 values less than (25), partition p_35 values less than (35), partition p_45_after values less than (MAXVALUE));--插入数据。gaussdb=# INSERT INTO reason_p values(1,'AAAAAAAABAAAAAAA','reason 1'), (5,'AAAAAAAABAAAAAAA','reason 2'), (15,'AAAAAAAABAAAAAAA','reason 3'), (25,'AAAAAAAABAAAAAAA','reason 4'), (35,'AAAAAAAABAAAAAAA','reason 5'), (45,'AAAAAAAACAAAAAAA','reason 6');--清空分区p_05_before。gaussdb=# ALTER TABLE reason_p TRUNCATE PARTITION p_05_before UPDATE GLOBAL INDEX;--清空分区p_15。gaussdb=# ALTER TABLE reason_p TRUNCATE PARTITION for (13) UPDATE GLOBAL INDEX;--清空分区表。gaussdb=# TRUNCATE TABLE reason_p;--删除表reason_p。gaussdb=# DROP TABLE reason_p;
  • 参数说明 ONLY 如果声明ONLY,只有指定的表会被清空。如果没有声明ONLY,这个表以及其所有子表(若有)会被清空。 table_name 目标表的名称(可以有模式修饰)。 取值范围:已存在的表名。 CONTINUE IDENTITY 不改变序列的值。这是缺省值。 CASCADE | RESTRICT CASCADE:级联清空所有由于CASCADE而被添加到组中的表。 RESTRICT(缺省值):如果其他表在该表上有外键(分布式场景暂不支持)引用则拒绝清空。 PURGE 默认将表数据放入回收站中,PURGE直接清理。 partition_name 目标分区表的分区名。 取值范围:已存在的分区名。 partition_value 指定的分区键值。 通过PARTITION FOR子句指定的这一组值,可以唯一确定一个分区。 取值范围:需要进行删除数据分区的分区键的取值范围。 使用PARTITION FOR子句时,partition_value所在的整个分区会被清空。
  • 注意事项 TRUNCATE TABLE在功能上与不带WHERE子句DELETE语句相同:二者均删除表中的全部行。 TRUNCATE TABLE比DELETE速度快且使用系统和事务日志资源少: DELETE语句每次删除一行,并在事务日志中为所删除每行记录一项。 TRUNCATE TABLE通过释放存储表数据所用数据页来删除数据,并且只在事务日志中记录页的释放。 TRUNCATE、DELETE和DROP三者的差异如下: TRUNCATE TABLE:删除内容,释放空间,但不删除定义。 DELETE TABLE:删除内容,不删除定义,不释放空间。 DROP TABLE:删除内容和定义,释放空间。
  • 语法格式 清理表数据。 12 TRUNCATE [ TABLE ] [ ONLY ] {table_name [ * ]} [, ... ] [ CONTINUE IDENTITY ] [ CASCADE | RESTRICT ] [ PURGE ]; 清理表分区的数据。 12345 ALTER TABLE [ IF EXISTS ] { [ ONLY ] table_name | table_name * | ONLY ( table_name ) } TRUNCATE PARTITION { partition_name | FOR ( partition_value [, ...] ) } [ UPDATE GLOBAL INDEX ];
  • 结构 PL/SQL块中可以包含子块,子块可以位于PL/SQL中任何部分。PL/SQL块的结构如下: 声明部分:声明PL/SQL用到的变量、类型、游标以及局部的存储过程和函数。 DECLARE 不涉及变量声明时声明部分可以没有。 对匿名块来说,没有变量声明部分时,可以省去DECLARE关键字。 对存储过程来说,没有DECLARE, AS相当于DECLARE。即便没有变量声明的部分,关键字AS也必须保留。 执行部分:过程及SQL语句,程序的主要部分。必选。 BEGIN 执行异常部分:错误处理。可选。 EXCEPTION 结束。必选。 END;/ 禁止在PL/SQL块中使用连续的Tab,连续的Tab可能会造成在使用gsql工具带“-r”参数执行PL/SQL块时出现异常。
共100000条