GBase 8s 中的关键字(表达式)

GBase 8s中有一些特殊的关键字,比如rowid,rownum这样的,可以直接在查询语句中直接使用,表示特定的含义。
这种类型的关键字,在使用到表上时需要特别小心,否则可能得非预想要的结果。
如:

select * from tab1 where default_role like '%N%';

表面上的意思是:查询tab1中default_role字段中包含'N'字符的数据,select * from tab1返回的default_role字段中也有包含'N'的数据。但它却返回了空结果?!为什么呢?
原因就是DEFAULT_ROLE是内置关键字,直接写DEFAULT_ROLE是获取当前用户的默认角色,当前默认角色名并不包含'N',因此该语句应该改成

select * from tab1 where tab1.default_role like '%N%';

也就是说:使用表名/表别名限制定符.字段名称时,SQL才会正确解析为字段名称。这也只是规避方法,更合理的方式是:不使用保留的关键字做表名、字段和别名。
注:对于其关键字,也适合于使用 表名/表别名限制定符.字段名称 的方式。

以下是已知现有的关键字(表达式),它们有特别含义。

关键字示例描述
CURRENT2024-04-18 12:45:58.000返回当前时间,该关键字可扩展使用(指定日期时间精度,如current year to second)
CURRENT_ROLErole1返回当前使用的角色
CURRENT_USER
USER
gbasedbt返回当前用户
DEFAULT_ROLErole1返回当前默认的角色
DBSERVERNAME
SITENAME
gbase01返回当前的实例名称
NULLNULL返回NULL
ROWID769返回该行数据的物理存储位置,注:rowid并不是连续的
ROWNUM1返回结果集中的ROWNUM序号
SYSDATE2024-04-18 12:45:58.00000返回当前时间,该关键字可扩展使用(指定日期时间精度,如sysdate year to second)
TODAY2024-04-18返回当前日期

注:以上关键字(表达式)可能在不同版本中不一样。

标签: gbase 8s, GBase, 关键字

添加新评论