宏变量
功能描述
系统提供的宏变量包括SYSDATE,DBTIMEZONE,SESSIONTIMEZONE和SYSTIMESTAMP,ROWNUM,ROWID。
- SYSDATE:获取当前系统时期。
- DBTIMEZON:返回数据库时区。
- SESSIONTIMEZONE:返回当前会话时区。
- SYSTIMESTAMP:返回本机数据库上当前系统日期和时间,精确到毫秒。
- ROWNUM:获取查询结果中的元组序号。
ROWID:获取一条记录的一个相对唯一地址值。ROWID是一个伪列,该值表明了该行在数据库中的详细物理地址,通过ROWID,数据库可以快速定位某行具体数据的位置。
- 宏变量ROWID仅在数据库兼容模式为Oracle时支持(即数据库实例初始化时指定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 --------------------- 2024-05-17 15:40:39 (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、创建测试表并插入数据。
CREATE TABLE t01(id int,name varchar2(32)); INSERT INTO t01(id,name) VALUES(1,'a'),(2,'b'),(3,'c'),(4,'d');
2、查询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)
3、子查询外层支持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)
清理环境
DROP TABLE t01, empsalary;