学习记录使用oracle语句,以备查询。
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 却总显示所有记录
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;