VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

宏变量

功能描述

系统提供的宏变量包括SYSDATE,DBTIMEZONE,SESSIONTIMEZONE和SYSTIMESTAMP,ROWNUM,ROWID。

  • SYSDATE:获取当前系统时期。
  • DBTIMEZON:返回数据库时区。
  • SESSIONTIMEZONE:返回当前会话时区。
  • SYSTIMESTAMP:返回本机数据库上当前系统日期和时间,精确到毫秒。
  • ROWNUM:获取查询结果中的元组序号。
  • ROWID:获取一条记录的一个相对唯一地址值。ROWID是一个伪列,该值表明了该行在数据库中的详细物理地址,通过ROWID,数据库可以快速定位某行具体数据的位置。

    • 宏变量ROWID仅在数据库兼容模式为Oracle时能够使用(即创建DB时DBCOMPATIBILITY='A'),在其他数据库兼容模式下不能使用该特性。
    • 子查询中也可以使用ROWID。

示例

SYSDATE

select sysdate from dual;

返回结果为:

       sysdate       
---------------------
 2020-09-26 00:44:05
(1 row)

DBTIMEZONE

select dbtimezone;

返回结果为:

 dbtimezone
------------
 PRC
(1 row)

SESSIONTIMEZONE

select sessiontimezone;

返回结果为:

 sessiontimezone
-----------------
 PRC
(1 row)

SYSTIMESTAMP

select systimestamp;

返回结果为:

       sysdate
---------------------
 2022-07-01 16:43:47
(1 row)

ROWNUM

1、创建临时表并插入数据。

CREATE TEMPORARY TABLE empsalary (
depname varchar,
empno bigint,
salary int,
enroll_date date
);
INSERT INTO empsalary VALUES
('develop', 10, 5200, '2007-08-01'),
('sales', 1, 5000, '2006-10-01'),
('personnel', 5, 3500, '2007-12-10'),
('sales', 4, 4800, '2007-08-08'),
('personnel', 2, 3900, '2006-12-23'),
('develop', 7, 4200, '2008-01-01'),
('develop', 9, 4500, '2008-01-01'),
('sales', 3, 4800, '2007-08-01'),
('develop', 8, 6000, '2006-10-01'),
('develop', 11, 5200, '2007-08-15');

2、执行查询语句。

select rownum,depname,empno,salary from empsalary where rownum <3;

返回结果为:

 rownum | depname | empno | salary
--------+---------+-------+--------
      1 | develop |    10 |   5200
      2 | sales   |     1 |   5000
(2 rows)

ROWID

1、创建并切换至兼容模式为ORACLE的数据库db_oracle。

CREATE DATABASE db_oracle dbcompatibility='A';
\c db_oracle 

2、创建测试表并插入数据。

create table t01(id int,name varchar2(32));
insert into t01(id,name) values(1,'a'),(2,'b'),(3,'c'),(4,'d');

3、查询ROWID。

 select rowid,t.* from (select a.* from t01 a) t;

返回结果为:

        rowid         | id | name
----------------------+----+------
 h1IAAA==AAAAAA==AQA= |  1 | a
 h1IAAA==AAAAAA==AgA= |  2 | b
 h1IAAA==AAAAAA==AwA= |  3 | c
 h1IAAA==AAAAAA==BAA= |  4 | d
(4 rows)

4、子查询外层支持ROWID。

select rowid as rowid_2,t.* from (select rowid,a.* from t01 a) t;

返回结果为:

       rowid_2        |        rowid         | id | name
----------------------+----------------------+----+------
 h1IAAA==AAAAAA==AQA= | h1IAAA==AAAAAA==AQA= |  1 | a
 h1IAAA==AAAAAA==AgA= | h1IAAA==AAAAAA==AgA= |  2 | b
 h1IAAA==AAAAAA==AwA= | h1IAAA==AAAAAA==AwA= |  3 | c
 h1IAAA==AAAAAA==BAA= | h1IAAA==AAAAAA==BAA= |  4 | d
(4 rows)