您的位置:首页 > 数据库 > Oracle

Oracle学习一

2016-12-05 11:28 429 查看
学习记录使用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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle