Select 查询 自增序列生成

本文介绍了在MsSqlserver中使用ROW_NUMBER()函数实现简单分页的方法,并对比了mySql环境下通过设置变量来达到相同目的的不同实现方式。

ms Sqlserver:使用默认函数ROW_NUMBER()

SELECT ROW_NUMBER()OVER (ORDER BY SID DESC)  AS ROW, location  FROM table where Kind >=4

mySql :没有函数,只能使用变量

set @n = 0;
select (@n := @n + 1) as id , location from  table where Kind >=4
在 Oracle 数据库中,表本身并不直接支持自字段(如 MySQL 的 `AUTO_INCREMENT` 或 SQL Server 的 `IDENTITY`)[^2]。通常,Oracle 使用 **序列(Sequence)** 和 **触发器(Trigger)** 来模拟实现自字段的功能。因此,要查询某个表的“自序列”,实际上需要查找与该表关联的序列对象。 ### 查询与表关联的序列 通常,序列的命名会与表相关联,例如 `seq_table_name` 或 `table_name_seq`。可以通过以下方式查找可能与表关联的序列: ```sql SELECT sequence_name FROM all_sequences WHERE sequence_owner = 'YOUR_SCHEMA_NAME'; ``` 替换 `YOUR_SCHEMA_NAME` 为实际的模式名称。 如果已知表名,可以通过查询数据字典视图 `ALL_DEPENDENCIES` 或 `ALL_SOURCE` 来查找与表相关的触发器或序列: ```sql SELECT name, type FROM all_dependencies WHERE referenced_name = 'YOUR_TABLE_NAME'; ``` 这将列出所有依赖于该表的对象,包括触发器和包等。如果触发器中使用了序列(例如在插入操作时调用 `sequence.NEXTVAL`),可以通过查询触发器的定义来确认: ```sql SELECT trigger_name, trigger_type, triggering_event, when_clause, trigger_body FROM all_triggers WHERE table_name = 'YOUR_TABLE_NAME'; ``` 查看 `trigger_body` 字段,通常可以看到类似 `sequence_name.NEXTVAL` 的语句,这表示该触发器使用了某个序列来生成自主键值 。 ### 查询序列的当前值 要查看某个序列的当前值,可以使用以下语句: ```sql SELECT your_sequence_name.CURRVAL FROM dual; ``` 注意:只有在当前会话中已经调用了 `NEXTVAL` 之后,才能使用 `CURRVAL` 查询当前值。 如果想查看下一个值(同时也会递序列): ```sql SELECT your_sequence_name.NEXTVAL FROM dual; ``` ### 示例:创建序列和触发器实现自 以下是一个典型的实现 Oracle 表主键自的示例: ```sql -- 创建序列 CREATE SEQUENCE seq_employee START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; -- 创建表 CREATE TABLE employee ( id NUMBER PRIMARY KEY, name VARCHAR2(100) ); -- 创建触发器 CREATE OR REPLACE TRIGGER trg_employee_autoinc BEFORE INSERT ON employee FOR EACH ROW BEGIN SELECT seq_employee.NEXTVAL INTO :new.id FROM dual; END; / ``` 上述操作使得在插入新记录时,若未指定 `id` 值,则会自动从 `seq_employee` 序列中获取下一个值并赋给 `id` 字段 [^2]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值