Chinaunix首页 | 论坛 | 博客
  • 博客访问: 97433
  • 博文数量: 35
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 302
  • 用 户 组: 普通用户
  • 注册时间: 2017-02-07 17:04
个人简介

不积跬步无以至千里,每天进步一点点~

文章分类

全部博文(35)

文章存档

2018年(3)

2017年(32)

我的朋友

分类: Oracle

2017-12-15 14:39:11

一、同义词
同义词=表的别名,为不同用户间的数据访问带来方便的机制。
创建同义词的语法:(需要管理员权限操作)
create[public]synonym同义词名称for数据库对象;
范例:
create synonym myemp for c##scott.emp;
select * from myemp;
此时myemp只能被sys用户使用,要想让所有用户使用,就要创建公共
同义词。
drop synonym myemp;
create public synonym myemp for c##scott.emp;
select * from myemp;
二、伪列:
在oracle数据库中为了实现完整的关系数据库的功能,专门为用户提供了许多的伪列,
像序列时所使用的nextval和currval就是两个默认提供的伪列同时在之前使用的sysdate
与systimestamp也属于伪列(而查询使用的dual称为伪表),这些数据伪列并不是用户
用户在建立数据库时由用户完成的,而oracle自动帮助用户建立的,用户只需要按照要求
使用即可,其中两个重要的伪列:rownum,rowid.

rowid 伪列:
在数据表中每一行所保存的记录,实际上oracle都会默认为每条记录分配一个唯一的地址
编号,而这个地址编号就是通过rowid进行表示的,rowid本身是一个数据的伪列,所有
的数据都利用rowid进行数据定位。
范例:观察rowid的存在
select rowid,deptno,dname,loc from dept;
rowid组成
rowid:AAASNJAAEAAAAIUAAA
数据对象号(data object number)为AAASNJ
相对文件号(relative file number)为AAE
数据块号(block number)为AAAAIU
数据行号(row number)为AAA
rowid的操作函数
NO
函数名称 描述
1 DBMS_ROWID.rowid_object(ROWID) 从一个ROWID之中,取得数据对象号
2 DBMS_ROWID.rowid_relative_fno(ROWID) 从一个ROWID之中,取得相对文件号
3 DBMS_ROWID.rowid_block_number(ROWID) 从一个ROWID之中,取得数据块号
4 DBMS_ROWID.rowid_row_number(ROWID) 从一个ROWID之中,取得数据行号

select rowid,
DBMS_ROWID.rowid_object(rowid) 数据对象号,
DBMS_ROWID.rowid_relative_fno(ROWID) 相对文件号,
DBMS_ROWID.rowid_block_number(ROWID) 数据块号,
DBMS_ROWID.rowid_row_number(ROWID) 数据行号,
deptno,dname,loc from dept;


rownum伪列:
在所有的伪列之中,rownum是一个非常重要的核心重点.
rownum不是固定于某行数据的,是根据查询的不同进行累加的结果。
rownum除了可以自动的进行行号的显示之外,也可以完成一下两个常用操作:
操作一:取出一个查询的第一行记录;
操作二:取出一个查询的前n行记录;
select rownum,empno,ename,job,sal,hiredate from emp;
范例:使用rownum取得首行
注意:只能是首行,不能是其他行,因为rownum是随机生成的,是在select子句之中出现,
where 是优先于select执行。
select * from emp where rownum=1;
范例:使用rownum取得前n行
select * from emp where rownum<=5;

数据的分页显示:
分页操作组成:
数据显示部分:主要是从数据表之中遴选出指定的部分数据,需要rownum伪列才可以完成;
分页控制部分:留给用户的控制端,用户只需要选择指定的页数,那么应用程序就会根据用
户的选择,列出指定的部分数据,相当于控制了格式中的currentPage;
分页操作的语法:
select * from (
      select 列1 ROWNUM rownum别名
      from 表名称 别名
      where  ROWNUM<=(currentPage(当前页)*linesize(每页显示记录行数)))temp
      where temp.rownum别名>(currentPage(当前页)-1)*linesize(每页显示记录行数);
      
范例:实现数据的分页,查询第一页数据(currentpage=1,pagesize=5)
select * from(
select empno,ename,job,mgr,sal,ROWNUM row_num from emp
where ROWNUM<=5)temp
where temp.row_num > 0;
范例:实现数据的分页,查询第二页数据(currentpage=2,pagesize=5)
select * from(
select empno,ename,job,mgr,sal,ROWNUM row_num from emp
where ROWNUM<=10)temp
where temp.row_num > 5;
对于分页在数据开发之中一定会出现,而且使用rownum实现分页,也一定会一直出现。

FETCH语句
在oracle12c之中为了方便数据的分页显示操作,专门提供了FETCH语句,使用此语句可以方便的
取得指定范围的操作数据。
FETCH语句语法
select [distinct]分组字段1[as][列别名],[分组字段2]...
from 表名称 [表别名]
[where 条件(s)]
[group by 分组字段1,分组字段2..]
[having过滤条件(S)]
[order by 排序字段ASC|DESC]
[FETCH FIRST行数]|[offset开始位置rows FETCH NEXT个数]|[FETCH NEXT百分比
PERCENT]ROW ONLY
此语句有三种使用方式:
取得前N行记录:FETCH FIRST 行数 ROW ONLY;
取得指定范围的记录:OFFSET 开始位置 ROW FETCH NEXT 个数 ROWS ONLY;
按照百分比取得记录: FETCH NEXT 百分比 PERCENT RWOS ONLY
范例:取得emp表的前5行记录
select * from emp order by sal fetch first 5 row only;
范例:取得4-5条记录
select * from emp order by sal offset 3 row fetch net 2 rows only;
范例:取得10%的数据
select * from emp order by sal fetch next 10 percent rows only;


阅读(1321) | 评论(0) | 转发(0) |
0

上一篇:Oracle学习12-序列

下一篇:Oracle学习14-索引

给主人留下些什么吧!~~