Oracle学习一

前端之家收集整理的这篇文章主要介绍了Oracle学习一前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

学习记录使用oracle语句,以备查询

修改表结构:
- 1、修改表中字段可以为空

ALTER TABLE [表名] MODIFY [表字段] NULL

2、修改表中字段名

ALTER TABLE [表名] rename column [ 旧名] to [新名]

ORACLE SEQUENCE
- 创建sequence

create sequence [序列名]
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;

CREATE SEQUENCE MESSAGE_ALL_LOG_ID_SEQ
MINVALUE 1
NOMAXVALUE
INCREMENT BY 1
START WITH 1
NOCACHE

rownum与rowid

虽然rownum和rowid都是oracle数据库中的伪列,但是二者之间还是存在根本的差别的。它们的存在方式不同:
(1)rowid是物理存在的,表示记录在表空间中的唯一位置id,在数据库中是唯一的,rowid相对于表来说就像表中的一般列。
(2)rownum是一个序列,是oracle数据库从数据文件或数据缓存区中读取数据的顺序。

鉴于rownum的特殊之处,下面对几种现象进行说明。

1、 select rownum,t.* from DEVICEINFO t where rownum!=10为何返回的是前9条数据?
select rownum,t.* from DEVICEINFO t where rownum<10返回的也是前9条数据

因为rownum为9后,取的记录的rownum为10,因条件为 !=10,所以删掉。然后取下一条,其rownum又是10,也删掉。以此类推,所以只会显示前面9条记录。

2、为什么rownum >1时查不到一条记录,而 rownum >0或rownum >=1 却总显示所有记录

这是因为rownum是在查询到的结果集后,再加上去的,它总是从1开始的。

3、为什么 select rownum,t.* from DEVICEINFO t where rownum between 0 and 10或者between 1 and 10都能查询到前10条数据,而between 2 and 10什么都查不到?

因为rownum都是从1开始,参考上面的1理解。

从上面的可知,任何时候想把rownum = 1这条记录抛弃是不对的。它在结果集中是不可或缺的。 少了rownum=1就像空中楼阁一般不能存在。所以,rownum条件要包含到1。

oracle分页

根据上面对rownum、rowid的理解。将其运用到分页中,
下面运用到的表DEVICEINFO,表结构的部分字段如下:

SELECT * FROM DEVICEINFO WHERE ROWID IN (SELECT RID FROM (SELECT ROWNUM RN,RID FROM (SELECT ROWID RID,EMPNO FROM DEVICEINFO ORDER BY SERIALNO DESC) WHERE ROWNUM <= ( (currentPage-1) * pageSize + pageSize )) --每页显示几条 WHERE RN > ((currentPage-1) * pageSize) ) --当前页数 ORDER BY SERIALNO DESC;
原文链接:https://www.f2er.com/oracle/211456.html

猜你在找的Oracle相关文章