华为云用户手册

  • 参数说明 LOCAL 声明该命令只在当前事务中有效。 SESSION 声明这个命令只对当前会话起作用。 取值范围:字符串,要符合标识符的命名规范。 ISOLATION LEVEL 指定事务隔离级别,该参数决定当一个事务中存在其他并发运行事务时能够看到什么数据。 在事务中第一个数据修改语句(INSERT,DELETE,UPDATE,FETCH,COPY)执行之后,事务隔离级别就不能再次设置。 取值范围: READ COMMITTED:读已提交隔离级别,只能读到已经提交的数据,而不会读到未提交的数据。这是缺省值。 READ UNCOMMITTED:读未提交隔离级别, GaussDB (DWS)不支持READ UNCOMMITTED,如果设置了READ UNCOMMITTED,实际上使用的是READ COMMITTED。 REPEATABLE READ:可重复读隔离级别,仅能看到事务开始之前提交的数据,不能看到未提交的数据,以及在事务执行期间由其它并发事务提交的修改。 SERIALIZABLE:事务可序列化,GaussDB(DWS)不支持SERIALIZABLE,如果设置了SERIALIZABLE,实际上使用的是REPEATABLE READ。 READ WRITE | READ ONLY 指定事务访问模式(读/写或者只读)。
  • 示例 撤销my_savepoint建立之后执行的命令的影响: 1 ROLLBACK TO SAVEPOINT my_savepoint; 游标位置不受保存点回滚的影响: 1 2 3 4 5 6 7 8 910111213 BEGIN;DECLARE foo CURSOR FOR SELECT 1 UNION SELECT 2;SAVEPOINT foo;FETCH 1 FROM foo; ?column? ---------- 1ROLLBACK TO SAVEPOINT foo;FETCH 1 FROM foo; ?column? ---------- 2COMMIT;
  • 示例 建立并随后销毁一个保存点: 1234567 BEGIN; CREATE TABLE IF NOT EXISTS table1 (a int,b int); INSERT INTO table1 VALUES (3); SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (4); RELEASE SAVEPOINT my_savepoint;COMMIT;
  • 功能描述 RELEASE SAVEPOINT删除当前事务先前定义的保存点。 保存点删除后便无法再作为回滚点使用,除此之外没有其它用户可见的行为。删除保存点并不能撤销在保存点建立起来之后执行的命令的影响。要撤销那些命令可以使用ROLLBACK TO SAVEPOINT 。在不再需要的时候删除保存点可以令系统在事务结束之前提前回收一些资源。 RELEASE SAVEPOINT也删除所有在指定的保存点建立之后的所有保存点。
  • 注意事项 不能回滚到未定义的保存点,语法上会报错。 在保存点方面,游标有一些非事务性的行为。任何在保存点里打开的游标都会在回滚掉这个保存点之后关闭。如果一个前面打开了的游标在保存点里面,并且游标被一个FETCH命令影响,而这个保存点稍后回滚了,那么这个游标的位置仍然在FETCH让它指向的位置(也就是FETCH不会被回滚)。关闭一个游标的行为也不会被回滚给撤销掉。如果一个游标的操作导致事务回滚,那么这个游标就会置于不可执行状态,所以,尽管一个事务可以用ROLLBACK TO SAVEPOINT重新恢复,但是游标不能再使用了。 使用ROLLBACK TO SAVEPOINT回滚到保存点。使用RELEASE SAVEPOINT删除保存点,但是保留该保存点建立后执行的命令的效果。
  • - 描述:减 示例: 1 2 3 4 5 6 7 8 910 SELECT inet '192.168.1.43' - 36 AS RESULT; result ------------- 192.168.1.7(1 row)SELECT inet '192.168.1.43' - inet '192.168.1.19' AS RESULT; result -------- 24(1 row)
  • 参数说明 INTO子句 指定正在更新或插入的目标表。 table_name 目标表的表名。 alias 目标表的别名。 取值范围:字符串,符合标识符命名规范。 USING子句 指定源表,源表可以为表、视图或子查询。 ON子句 关联条件,用于指定目标表和源表的关联条件。不支持更新关联条件中的字段。 WHEN MATCHED子句 当源表和目标表中数据针对关联条件可以匹配上时,选择WHEN MATCHED子句进行UPDATE操作。 不支持更新分布列。不支持更新系统表、系统列。 WHEN NOT MATCHED子句 当源表和目标表中数据针对关联条件无法匹配时,选择WHEN NOT MATCHED子句进行INSERT操作。 不支持INSERT子句中包含多个VALUES。 WHEN MATCHED和WHEN NOT MATCHED子句顺序可以交换,可以缺省其中一个,但不能同时缺省,不支持同时指定两个WHEN MATCHED或WHEN NOT MATCHED子句。 DEFAULT 用对应字段的缺省值填充该字段。 如果没有缺省值,则为NULL。 WHERE condition UPDATE子句和INSERT子句的条件,只有在条件满足时才进行更新操作,可缺省。不支持WHERE条件中引用系统列。
  • 示例 创建目标表products和源表newproducts,并插入数据: 1 2 3 4 5 6 7 8 91011121314151617181920212223242526 DROP TABLE IF EXISTS products;CREATE TABLE products(product_id INTEGER,product_name VARCHAR2(60),category VARCHAR2(60));INSERT INTO products VALUES (1501, 'vivitar 35mm', 'electrncs');INSERT INTO products VALUES (1502, 'olympus is50', 'electrncs');INSERT INTO products VALUES (1600, 'play gym', 'toys');INSERT INTO products VALUES (1601, 'lamaze', 'toys');INSERT INTO products VALUES (1666, 'harry potter', 'dvd');DROP TABLE IF EXISTS newproducts;CREATE TABLE newproducts(product_id INTEGER,product_name VARCHAR2(60),category VARCHAR2(60));INSERT INTO newproducts VALUES (1502, 'olympus camera', 'electrncs');INSERT INTO newproducts VALUES (1601, 'lamaze', 'toys');INSERT INTO newproducts VALUES (1666, 'harry potter', 'toys');INSERT INTO newproducts VALUES (1700, 'wait interface', 'books'); 进行MERGE INTO操作: 1234567 MERGE INTO products p USING newproducts np ON (p.product_id = np.product_id) WHEN MATCHED THEN UPDATE SET p.product_name = np.product_name, p.category = np.category WHERE p.product_name != 'play gym' WHEN NOT MATCHED THEN INSERT VALUES (np.product_id, np.product_name, np.category) WHERE np.category = 'books'; 查询更新后的结果: 1 SELECT * FROM products ORDER BY product_id; 删除表: 12 DROP TABLE products;DROP TABLE newproducts;
  • 注意事项 进行MERGE INTO操作的用户需要同时拥有目标表的UPDATE和INSERT权限,以及源表的SELECT权限。 不支持PREPARE。 不支持重分布过程中MERGE INTO。 不支持对包含触发器的目标表执行MERGE INTO。 对roundrobin表执行MERGE INTO时,推荐关闭GUC参数allow_concurrent_tuple_update,否则会不支持部分MERGE INTO语句。
  • 语法格式 1 2 3 4 5 6 7 8 91011121314 MERGE INTO table_name [ [ AS ] alias ]USING { { table_name | view_name } | subquery } [ [ AS ] alias ]ON ( condition )[ WHEN MATCHED THEN UPDATE SET { column_name = { expression | DEFAULT } | ( column_name [, ...] ) = ( { expression | DEFAULT } [, ...] ) } [, ...] [ WHERE condition ]][ WHEN NOT MATCHED THEN INSERT { DEFAULT VALUES | [ ( column_name [, ...] ) ] VALUES ( { expression | DEFAULT } [, ...] ) [, ...] [ WHERE condition ] }];
  • next_day(x,y) 描述:用于计算x时间开始的下一个星期y的时间。 ORA和TD兼容模式下,返回值类型为timestamp。 MySQL兼容模式下,返回值类型为date。 示例: 12345 SELECT next_day(TIMESTAMP '2017-05-25 00:00:00','Sunday')AS cal_result; cal_result --------------------- 2017-05-28 00:00:00(1 row)
  • unix_timestamp([timestamp with time zone]) 描述:获取从'1970-01-01 00:00:00'UTC到入参时间经历的秒数。无入参时,指定为当前时间。 返回值类型:bigint(无入参)/numeric(有入参) 示例: 12345 SELECT unix_timestamp(); unix_timestamp---------------- 1693906219(1 row) 12345 SELECT unix_timestamp('2018-09-08 12:11:13+06'); unix_timestamp---------------- 1536387073.000000(1 row)
  • last_day(d) 描述:用于计算时间点d本月最后一天的时间。 ORA和TD兼容模式下,返回值类型为timestamp。 MySQL兼容模式下,返回值类型为date。 示例: 12345 SELECT last_day(to_date('2017-01-01', 'YYYY-MM-DD')) AS cal_result; cal_result --------------------- 2017-01-31 00:00:00(1 row)
  • from_unixtime(unix_timestamp[,format]) 描述:格式串缺省时,将unix时间戳转换为日期时间类型输出。格式串指定时,将unix时间戳转换为指定格式的字符串输出。 返回值类型:timestamp(格式串缺省)/ text(格式串指定) 示例: 1 2 3 4 5 6 7 8 910 SELECT from_unixtime(875996580); from_unixtime--------------------- 1997-10-04 20:23:00(1 row)SELECT from_unixtime(875996580, '%Y %D %M %h:%i:%s'); from_unixtime--------------------------- 1997 5th October 04:23:00(1 row)
  • extract(field from interval) 描述:获取field指定精度的值。如果大于12,则取与12的模。field的有效值参见EXTRACT。 返回值类型:double precision 示例: 12345 SELECT extract(month FROM interval '2 years 3 months'); date_part ----------- 3(1 row)
  • isfinite(timestamp) 描述:测试判断是否为有限时间。 返回值类型:boolean 示例: 1 2 3 4 5 6 7 8 910 SELECT isfinite(timestamp '2001-02-16 21:28:30'); isfinite ---------- t(1 row)SELECT isfinite(timestamp 'infinity'); isfinite---------- f(1 row)
  • numtodsinterval(num, interval_unit) 描述:将数字转换为interval类型。num为numeric类型数字,interval_unit为固定格式字符串('DAY' | 'HOUR' | 'MINUTE' | 'SECOND')。 可以通过设置参数IntervalStyle为oracle,兼容该函数在Oracle中的interval输出格式。 示例: 1 2 3 4 5 6 7 8 910111213 SELECT numtodsinterval(100, 'HOUR'); numtodsinterval ----------------- 100:00:00(1 row)SET intervalstyle = oracle;SETSELECT numtodsinterval(100, 'HOUR'); numtodsinterval------------------------------- +000000004 04:00:00.000000000(1 row)
  • timestampdiff(field, timestamp1, timestamp2) 描述:将两个日期参数相减(timestamp2 - timestamp1),并以单位field作为返回值。若相减值为负,则函数返回值为负。field支持的参数为year、month、quarter、day、week、hour、minute、second和microsecond。 返回值类型:bigint 示例: 12345 SELECT timestampdiff(day, TIMESTAMP '2001-02-01', TIMESTAMP '2003-05-01 12:05:55'); timestampdiff --------------- 819(1 row)
  • trunc(timestamp) 描述:默认按天截取。 返回值类型:timestamp 示例: 1234 SELECT trunc(TIMESTAMP '2001-02-16 20:38:40'); trunc---------------------2001-02-16 00:00:00(1 row)
  • maketime(hour, minute, second) 描述:根据所给的小时,分钟和秒数返回time类型的值。由于GaussDB(DWS)中的time类型的取值范围为00:00:00到24:00:00,故不支持hour大于24时和hour小于0时的场景。 返回值类型:time 示例: 12345 SELECT maketime(12, 15, 30.12); maketime------------- 12:15:30.12(1 row)
  • now([fsp]) 描述:当前事务开始的日期及时间,参数确定微秒输出精度,缺省时为6。 返回值类型:timestamp with time zone 示例: 12345 SELECT now(); now ------------------------------- 2017-09-01 17:03:42.549426+08(1 row) 12345 SELECT now(3); now ---------------------------- 2021-09-08 10:59:00.427+08(1 row)
  • transaction_timestamp() 描述:当前日期及时间,与current_timestamp等效。 返回值类型:timestamp with time zone 示例: 12345 SELECT transaction_timestamp(); transaction_timestamp ------------------------------- 2017-09-01 17:05:13.534454+08(1 row)
  • date_part(text, timestamp) 描述:获取参数text指定的精度。 等效于extract(field from timestamp)。 返回值类型:double precision 示例: 12345 SELECT date_part('hour', TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 20(1 row)
  • date_part(text, interval) 描述:获取参数text指定的精度。如果大于12,则取与12的模。 等效于extract(field from timestamp)。 返回值类型:double precision 示例: 12345 SELECT date_part('month', interval '2 years 3 months'); date_part ----------- 3(1 row)
  • justify_interval(interval) 描述:结合justify_days和justify_hours,调整interval。 返回值类型:interval 示例: 12345 SELECT justify_interval(interval '1 MON -1 HOUR'); justify_interval ------------------ 29 days 23:00:00(1 row)
  • statement_timestamp() 描述:当前日期及时间。 返回值类型:timestamp with time zone 示例: 12345 SELECT statement_timestamp(); statement_timestamp ------------------------------- 2017-09-01 17:04:39.119267+08(1 row)
  • timeofday() 描述:当前日期及时间(像clock_timestamp,但是返回时为text。) 返回值类型:text 示例: 12345 SELECT timeofday(); timeofday ------------------------------------- Fri Sep 01 17:05:01.167506 2017 CS T(1 row)
  • date_trunc(text, timestamp) 描述:截取到参数text指定的精度。 返回值类型:timestamp 示例: 1 2 3 4 5 6 7 8 91011121314151617181920212223242526 SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40'); date_trunc --------------------- 2001-02-16 20:00:00(1 row)--获取去年的最后一天SELECT date_trunc('day', date_trunc('year',CURRENT_DATE)+ '-1'); date_trunc------------------------ 2022-12-31 00:00:00+08(1 row)--获取今年的第一天SELECT date_trunc('year',CURRENT_DATE); date_trunc------------------------ 2023-01-01 00:00:00+08(1 row)--获取去年的第一天SELECT date_trunc('year',now() + '-1 year'); date_trunc------------------------ 2022-01-01 00:00:00+08(1 row)
  • age(timestamp, timestamp) 描述:将两个参数相减,并以年、月、日作为返回值。若相减值为负,则函数返回亦为负。 返回值类型:interval 示例: 12345 SELECT age(TIMESTAMP '2001-04-10', TIMESTAMP '1957-06-13'); age ------------------------- 43 years 9 mons 27 days(1 row)
  • adddate(date, interval | int) 描述:返回给定日期时间加上指定单位的时间间隔的结果。默认单位(即第二个参数为整型时)为天数。 返回值类型:timestamp 示例: 当入参为text类型时: 1 2 3 4 5 6 7 8 9101112131415161718192021222324 SELECT adddate('2020-11-13', 10); adddate------------ 2020-11-23(1 row)SELECT adddate('2020-11-13', interval '1' month); adddate------------ 2020-12-13(1 row)SELECT adddate('2020-11-13 12:15:16', interval '1' month); adddate--------------------- 2020-12-13 12:15:16(1 row)SELECT adddate('2020-11-13', interval '1' minute); adddate--------------------- 2020-11-13 00:01:00(1 row) 当入参为date类型时: 1 2 3 4 5 6 7 8 91011 SELECT adddate(current_date, 10); adddate------------ 2021-09-24(1 row)SELECT adddate(date '2020-11-13', interval '1' month); adddate--------------------- 2020-12-13 00:00:00(1 row)
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全