YashanDB伪列

news/2025/3/28 15:51:37/文章来源:https://www.cnblogs.com/YashanDB/p/18792088

伪列的行为类似于普通列,但其数据并不存储在表中。用户可以SELECT伪列,但不能对伪列进行INSERT、UPDATE、DELETE操作。

YashanDB存在如下五种伪列:

  • ROWSCN
  • ROWID
  • ROWNUM
  • SEQUENCE
  • USER

ROWSCN伪列

ROWSCN伪列表示行最后一次被修改的SCN。YashanDB的ROWSCN为页面级别,一般情况下返回的ROWSCN是行所在页面最后一次修改并提交的BLOCK SCN,若使用特殊查询条件可能会返回该行最后一次修改并提交的SCN,例如使用ROWID为查询条件时。

若事务修改了表中某行数据并提交了修改,后续查询该行的ROWSCN时,返回值仅会大于或等于修改前的ROWSCN。

该伪列仅适用于HEAP表。

示例(HEAP表)
SELECT ROWSCN FROM area;

ROWID伪列

ROWID伪列表示行所在的地址。ROWID伪列的类型为ROWID类型,使用限制等更多说明请查阅ROWID UROWID。

该伪列仅适用于HEAP表。

示例(HEAP表)
SELECT ROWID FROM area;

ROWNUM伪列

ROWNUM伪列是系统顺序分配的查询返回的行编号,返回的第一行分配为1,第二行分配为2,依此类推。该伪列可用于限制查询返回的总行数。

分布式部署中不可使用该伪列。

ROWNUM在列存表中的使用限制如下:

  • ROWNUM只能与常量进行比较。
  • 条件语句中不能使用小于、小于等于、大于或大于等于运算符。
  • 使用等值比较时,ROWNUM所比较的对象只能为常量1。
  • 不允许ROWNUM在or的左右条件中使用。
  • ROWNUM在过滤条件中只能使用一次,且只能单独使用,不允许参与运算或作为函数入参。
  • ROWNUM不能出现在非比较谓词和不等于比较中,例如in。
  • 在外连接的连接条件中不可使用ROWNUM。
  • ROWNUM伪列的常用场景:

WHERE条件中做行数限制

WHERE ROWNUM < 常数,返回常数-1行的记录。
WHERE ROWNUM = 常数,ROWNUM从1开始累加,因此ROWNUM= 1可以返回1条记录;当ROWNUM = 任何非1值时,条件恒为FALSE,无法返回任何结果。
WHERE ROWNUM > 常数,常数小于1,则条件恒为TRUE;常数大于等于1,则条件恒为FALSE(即查询结果恒为空)。
示例(HEAP表)

SELECT area_no,area_name,DHQ FROM area WHERE ROWNUM < 2;AREA_NO AREA_NAME                                                     DHQ                   
------- ------------------------------------------------------------- --------------------- 
01      华东                                                        Shanghai         

ROWNUM与ORDER BY一起使用

先从表中取出符合ROWNUM条件的行然后再进行排序,其结果取决于执行计划,执行计划不同可能会导致取得的行不同。

示例(单机、共享集群部署)

-- 创建表STUDENTS
CREATE TABLE STUDENTS(num INT,score INT);
INSERT INTO STUDENTS VALUES(1,99);
INSERT INTO STUDENTS VALUES(1,76);
INSERT INTO STUDENTS VALUES(1,84);
INSERT INTO STUDENTS VALUES(1,63);
INSERT INTO STUDENTS VALUES(1,88);
COMMIT;-- 查询成绩前3的学生成绩,先取出3行再进行排序,结果不一定正确
SELECT score FROM STUDENTS WHERE ROWNUM < 4 ORDER BY score DESC;-- 查询成绩前3的学生成绩,可以使用order by + limit
SELECT score FROM STUDENTS ORDER BY score DESC LIMIT 3;-- 查询成绩前3的学生成绩,可以使用子查询 + ROWNUM
SELECT score FROM (SELECT score FROM STUDENTS ORDER BY score DESC) WHERE ROWNUM < 4;

ROWNUM与JOIN一起使用

在JOIN语句中,ROWNUM与在WHERE中使用相同的规则判断。

使用ROWNUM给表中每一行附上唯一的值

示例(单机、共享集群部署)

UPDATE STUDENTS SET num = ROWNUM;

SEQUENCE伪列
SEQUENCE伪列是创建序列对象时生成的唯一序列号,可分为如下两种类型:

CURRVAL:返回当前序列号值,即当前session上一次获取到的NEXTVAL值。
NEXTVAL:增加序列号的值并返回序列的NEXTVAL。
分布式部署中不可使用该伪列。

获取序列号:

sequence.CURRVAL
sequence.NEXTVAL

获取指定schema的序列号:

schema.sequence.CURRVAL
schema.sequence.NEXTVAL

dblink获取远端序列号:


[schema.]sequence.CURRVAL@DBLINK_NAME
[schema.]sequence.NEXTVAL@DBLINK_NAME

可以在以下场景使用CURRVAL伪列与NEXTVAL伪列:

  • SELECT语句中被查询的列中不包含子查询的场景
  • INSERT语句中的SELECT从句
  • INSERT语句中的VALUES从句
  • UPDATE语句中的SET从句
    禁止使用的场景:

DELETE、SELECT、UPDATE语句中的子查询语句
带有DISTINCT算子的SELECT语句
带有GROUP BY或ORDER BY子句的SELECT语句
多个SELECT语句通过UNION集合
SELECT语句中的WHERE子句
对于某一个序列号,在使用CURRVAL伪列前,同一会话中必须先通过NEXTVAL伪列完成CURRVAL值的初始化。

示例(单机、共享集群部署)

用以下语法获取序列号:

CREATE SEQUENCE seq_yashan_pseudo;SELECT seq_yashan_pseudo.NEXTVAL FROM dual;SEQ_YASHAN1.NEXTVAL
---------------------1SELECT seq_yashan_pseudo.CURRVAL FROM dual;SEQ_YASHAN1.CURRVAL
---------------------1

USER伪列

USER伪列返回当前登录用户的用户名,返回值类型为VARCHAR(64)。

分布式部署中不可使用该伪列。

示例(单机、共享集群部署)

SELECT USER FROM DUAL;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/905577.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YashanDB故障状态

YashanDB检测到异常故障时,防止扩散影响,会将数据库的状态置为ABNORMAL,数据库处于故障只读状态,可以查询,不能执行写的业务。 当数据库为ABNORMAL状态时,可以查看V$DIAG_INCIDENT视图或告警日志明确故障原因。 --故障发生时,数据库状态为ABNORMAL SELECT STATUS FROM V…

YashanDB故障诊断架构

故障诊断架构由多个组件构成,包括自动诊断存储库、运行日志、告警日志等。其中运行日志、告警日志参考日志管理中说明。#自动诊断存储库自动诊断存储库是基于文件的存储库,用于存储数据库的诊断数据。它的目录结构如下(默认放在YASDB_DATA目录下,可设置参数进行配置):其中…

安利一个求职刷题小妙招、变身 offer 收割机 | 《趣玩》第 2 期

通义灵码目前支持的模型已经全面升级,包括 qwen 2.5、qwen 2.5-max,以及通过强化学习优化的增强版推理模型 qwq-plus。作者:王二 在AI技术狂飙突进的今天,程序员如何借力 AI 突破职业瓶颈?阿里云推出的通义灵码插件给出了答案!这款智能编码助手近期完成升级,支持多个业内…

Android开发--Lesson04--对象传递以及文件存储

一.对象传递 使用Intent传递对象的时候需要注意到,被传递的对象必须是实现了Serialzable接口的对象,即被传递的对象必须要是可序列化的public class Student implements Serializable {private String id;private String name;public void setId(String id) {this.id = id;}p…

Ollama使用GPU运行

系统:Win10 GPU :NVIDIA GeForce RTX 2070 with Max-Q Design 禁用GPU 在环境变量中添加 CUDA_VISIBLE_DEVICES 并设为空值。 使用 ollama ps 命令可以看到全部用的CPUCUDA_VISIBLE_DEVICES 是一个环境变量,主要用于控制 NVIDIA CUDA 程序(如基于 CUDA 的应用程序或框架,例…

No.69 Vue---实践--我的网站

一、避坑指南 1.关于路径问题 也不要使用绝对路径 <template><div class="home"><!-- 开始部分 --><div class="signature"><div class="signature-text"><h4 id="hometitle1">在地图上绘制每一次…

Notepad--的安装与使用

Notepad--的安装与使用Notepad--是使用C++编写的轻量级文本编辑器,简称ndd,支持Window/Mac/Linux操作系统平台,还支持国产操作系统如统信Uos、麒麟kinly系统。本文只是概述Notepad--的功能,如果想了解全部的功能可参见官网的ndd说明书 下载与安装 下载地址: https://gitee.…

VirtualBox中的Kylin-Server-10-SP2迁移VMware后开无法进入系统和无网卡的问题记录

问题解决方案来源:https://www.cnblogs.com/flyxuxi/p/15009094.html使用VirtualBox安装Kylin-Server-10-SP2后将磁盘文件使用VMware打开出现无法进入系统和无网卡的问题记录VirtualBox 软件版本:7.1.6 存储 控制器: SATA SATA 端口 1: Kylin-Server-10-SP2-x86-Release-Buil…

地下市政基础设施管理平台:揭秘城市地下的“数字生命线”

2023年,住建部提出“到2025年底前实现综合管理信息平台全覆盖”的目标,标志着我国城市治理正式进入地下空间精细化时代。从道路塌陷到管网泄漏,从内涝预警到地铁安全,地下市政基础设施管理平台如何成为守护城市安全的“数字大脑”?本文带您一探究竟。 一、为何要建地下市政…

Frp内网穿透搭建教学

📌 FRP - Linux & Win 内网穿透教程 手搓难度 ⭐️⭐️🚀 适用于: 本地服务器、电脑、树莓派、香橙派内网穿透 🛠️ 工具:FRP(fast reverse proxy) 🖥️ 系统:Linux、Windows 📚架构:x86、amd、arm 📝Frp版本:v0.61.1 🎯教程日期:2025/2/12📖 目录…