一团网资讯

一团资讯 > oracle > Oracle序列(sequence),OracleRUNNUM和Oracle同义词(synonyms)...

Oracle序列(sequence),OracleRUNNUM和Oracle同义词(synonyms)

2018-04-21 23:41:08     发布者:来源网络

Oracle 序列

Oracle序列的概念: 序列是一数据库对象,利用它可生成唯一的整数。一般使用序列自动地生成主码值(类似于MySQL中的主键auto_increment属性)

有时候我们定义某张表其中某一列为主键,当我们往标中插入数据的时候,对于主键字段的赋值要求唯一性,我们希望能有个自增类型的数据库对象,我们每获取一次它就自动增长,保证下次获取的时候肯定是不一样的值,序列既是这种Oracle对象。 create sequence sequence_name [increment by n1, start with n2 ,maxvalue n3, cache n , nocache .....] 从序列取值:sequence_name.CURRVAL(取当前值) sequence_name.NEXTVAL(取下一条值) 更改序列的定义: alter sequence_name sequence definition;

属性cache的指定:

如果指定CACHE值,Oracle就可以预先在内存里面放置一些Sequence,这样存取的快些。 cache里面的取完后,Oracle自动再取一组到cache。使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort) cache中的Sequence就会丢失。 举个例子:比如你的sequence中cache 100,那当你sequence取到90时突然断电,那么在你重启数据库后,sequence的值将从101开始。 如果指定NOCACHE值,Oracle就不会预先在内存里面存放Sequence,当然这也就可以避免数据库不正常down掉的sequence丢失。 不过会产生一些问题:创建nocache sequence在高并发访问时,容易导致row cache lock等待事件 主要原因是每次获取nextval时都需要修改rowcache中的字典信息。使用nocache sequence,还会导致如下问题: 由于每次修改字典信息都需要commit,可能导致log file sync等待,nocache sequence在RAC环境下 会对基于sequence生成的列创建的索引造成实例间大量索引块争用。基于以上问题,避免创建nocache sequence。

创建序列的语法,序列是和表一样的对象要指定它的用户 CREATE SEQUENCE sequence [INCREMENT BY n] -- 自增的公差,默认为1 [START WITH n] -- 起始值 [{MAXVALUE n | NOMAXVALUE}] -- 最大值 [{MINVALUE n | NOMINVALUE}] -- 最小值 [{CYCLE | NOCYCLE}] -- 循环 [{CACHE n | NOCACHE}]; -- 缓存

从序列取值: CURRVAL 取当前值, NEXTVAL取下一个值

更改序列的定义: ALTER SEQUENCE dept_deptid_seq INCREMENT BY 20 MAXVALUE 999999 NOCACHE NOCYCLE;

Oracle RUNNUM

对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(,>=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇,同样是伪列,rownum 与 rowid 可有些不一样。

rownum是伪列,意思就是数据库中并不存在的列,它是只有在显示了第一行时才给出一个值 1,下一行则在上一行的值上加1,所以如果rownum>2 则不会有任何匹配的记录。由于rownum>2不匹配第一行记录,所以第一行不显示,记录跳到第二行,第二行又会被rownum重新写上值 1,这样第二行又不匹配。以此类推造成每行记录输出的rownum值永远停在1上,并由于条件rownum>2造成所有行都不被显示。(先有结果集才有rownum,任何时候想把 rownum = 1 这条记录抛弃是不对的,它在结果集中是不可或缺的,少了rownum=1 就像空中楼阁一般不能存在,所以你的 rownum 条件要包含到 1) 如果你想分页就必需将伪列转化为实际列,即将有伪列的查询做为子查询处理,简单的作为两次查询就可以了。 例如:select c.* from( select a.*,rownum rm from employees a) c where c.rm between 1 and 10 -- 分页查询前十条记录

rowid 与 rownum 虽都被称为伪列,但它们的存在方式是不一样的,rowid 可以说是物理存在的,表示记录在表空间中的唯一位置ID,在DB中唯一。只要记录没被搬动过,rowid是不变的。rowid 相对于表来说又像表中的一般列,所以以 rowid 为条件就不会有 rownum那些情况发生。 另外还要注意:rownum不能以任何基表的名称作为前缀。

通过rowid分页查询 select * from employees where rowid in ( --这里选择要查询出的字段 select rid from (select rownum rn, rid from (select rowid rid, salary from employees order by salary desc) --这里进行表排序 where rownum < 8 --这里是上限 ) where rn > 5 --这里是下限 ) order by salary desc --这里再次排序

Oracle 同义词(synonyms )

同义词概念

Oracle的同义词(synonyms) 从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系。它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;它扩展了数据库 的使用范围,能够在不同的数据库用户之间实现无缝交互;Oracle数据库中提供了同义词管理的功能。同义词是数据库对象的一个别名,经常用于简化对象访 问和提高对象访问的安全性。在使用同义词时,Oracle数据库将它翻译成对应方案对象的名字。与视图类似,同义词并不占用实际存储空间,只有在数据字典 中保存了同义词的定义。

Oracle同义词有两种类型,分别是Oracle公用同义词与Oracle私有同义词。普通用户创建的同义词一般都是私有同义词,公有同义词一般由DBA创建,普通用户如果希望创建同义词,则需要CREATE PUBLIC SYNONYM这个系统权限。

1)Oracle公用同义词:由一个特殊的用户组Public所拥有。顾名思义,数据库中所有的用户都可以使用公用同义词。公用同义词往往用来标示一些比较普通的数据库对象,这些对象往往大家都需要引用。

2)Oracle私有同义词:它是跟公用同义词所对应,他是由创建他的用户所有。当然,这个同义词的创建者,可以通过授权控制其他用户是否有权使用属于自己的私有同义词。

同义词作用

1) 多用户协同开发中,可以屏蔽对象的名字及其持有者。public同义词只是为数据库对象定义了一个公共的别名,其他用户能否通过这个别 名访问这个数据库对象,还要看是否已经为这个用户授权。

2)为分布式数据库的远程对象提供位置透明性。

4)Oracle同义词在数据库链接中的作用,数据库链接是一个命名的对象,说明一个数据库到另一个数据库的路径,通过其可以实现不同数据库之间的通信。

Create database link 数据库链名 connect to user名 identified by 口令 using ‘Oracle连接串’; 访问对象要通过 object名@数据库链名。同义词在数据库链中的作用就是提供位置透明性。

[ 责任编辑:来源网络 ]

oracle 查询公有同义词,Oracle序列(sequence),OracleRUNNUM和Oracle同义词(synonyms)相关推荐

  1. oracle查询当前归档scn_【学习笔记】Oracle数据库 查看归档日志存放的位置

    [学习笔记]Oracle数据库 查看归档日志存放的位置 时间:2016-10-21 19:19   来源:Oracle研究中心   作者:HTZ   点击: 次 天萃荷净 分享一篇关于查看Oracle ...

  2. oracle查询数据做标记,【学习笔记】Oracle如何使用dbms_shared_pool.markhot标记热对象...

    [学习笔记]Oracle如何使用dbms_shared_pool.markhot标记热对象 时间:2016-10-30 20:17   来源:Oracle研究中心   作者:HTZ   点击: 次 天 ...

  3. oracle查询一列汇总,【学习笔记】Oracle数据筛选 查找oracle所有表中的特定列中的某些数据...

    天萃荷净 开发DBA反映,根据需求需要查找Oracle数据库中所有表中特定的列中指定的关键词的数据,和数据内容和数量 找出数据库中所有表表中REMARK列中含有WN.wind.wlr中表名和数量 de ...

  4. oracle查询数据库启动时的参数文件,【Oracle】数据库启动阶段参数文件、控制文件的问题处理...

    Oracle启动分三个阶段: nomount: 首先查找参数文件(pfile/spfile),根据文件创建实例.Nomount的过程是启动数据库实例的过程. 没有参数文件无法nomount mount ...

  5. oracle查询性能表关联,通过调节索引 优化Oracle关联查询性能

    本文引用一套实验室信息管理系统(LIS)使用的数据库,假设我们要查询2008年11月做检验的患者记录,条件是大于80岁,姓周的患者,最终结果按检查日期进行倒序排列.要使用的表有三个: ◆lis_rep ...

  6. oracle查询表的id,oracle 查看所有用户及密码 实现Oracle查询用户所有表

    1.oracle 查看所有用户及密码 SQL> select username from dba_users; 2. 实现Oracle查询用户所有表 下面为您介绍的语句用于实现Oracle查询用 ...

  7. oracle里查询表的语句,Oracle查询用户所有表的语句

    下面为您介绍的语句用于实现Oracle查询用户所有表,如果您对oracle查询方面感兴趣的话,不妨一看.select * from all_tab_commen 下面为您介绍的语句用于实现Oracle ...

  8. oracle查看列属性,oracle查询列属性

    oracle 动态查询列,查看oracle数据库的表名和列名,oracle查询列名,oracle查询列属性 oracle 查询动态列,查看oracle数据库的表名和列名,oracle查询列名,orac ...

  9. 查询本机或线上服务器上oracle版本的方法

    oracle查询本机或线上服务器上oracle版本的方法 方式一:命令行方式 如果是查本机的oracle版本的话, win+r -> cmd -> sqlplus / as sysdba ...

最新文章

  1. LeetCode 438. Find All Anagrams in a String--字符串-滑动窗口--C++,Python解法
  2. DevExpress的LookUpEdit怎样不显示列名
  3. linux下使用make指令生成程序时提示“XXX is up to date”问题的解决办法
  4. jdk 加密_使用JDK的密码流的加密怪癖(以及该怎么做)
  5. Android逆向笔记-使用Android Studio调试Smali代码(方式一)
  6. Xshell连接Ubuntu时提示SSH服务器拒绝了密码
  7. 使用vue来开发一个下拉菜单组件(2)
  8. Systrace的用法小结
  9. WebService入门案例
  10. poj 2255 Tree Recovery
  11. python电脑配置-入门学python需要什么配置的电脑?
  12. poj Gone Fishing 枚举加贪心 当初做的很纠结啊!!终于A了,与大家分享一下经验
  13. Selenium爬虫 -- 无界面爬取:无头模式及其他参数
  14. 中职高考计算机试题及答案,中职高考计算机试题及答案
  15. List集合之CopyOnWriteArrayList
  16. 由DOOM启示录想到微软的发展。
  17. Error parsing column 33
  18. xp无法访问win7计算机,xp连接win7共享打印机无法连接
  19. 多因子模型与细分行业多因子测试源码(以医疗行业为例)
  20. 我热爱计算机作文450字,我的国学机作文450字

热门文章

  1. 淮北师范大学的计算机科学与技术怎么样,淮北师范大学和安庆师范大学怎么样?两个大学哪个更好?...
  2. 斗地主 java思路_使用Java实现简单的斗地主案例
  3. R语言 BP神经网络
  4. Bada学习-终止应用
  5. Leetcode 1370. Increasing Decreasing String
  6. 在XFCE桌面环境面板的clock插件之日历(calendar)部分增加中国农历显示功能
  7. Java UI组件和多媒体
  8. 【微机接口】可编程定时器/计数器8254
  9. 2018 0612 ----最小系统STM32 + oled(SPi连接)
  10. java毕业设计——基于java+EVENODD编码的基于纠错码的冗余技术设计与实现(毕业论文+程序源码)——基于纠错码的冗余技术