`
vtyi
  • 浏览: 82392 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

synonym sequence 权限

阅读更多

Oracle 创建用户 / 密码并授权

(1)       创建用户

Create user 用户名 identified by 密码;(如果是数字则要加双引号 ”111111” ,如果是字母就不用)

(2)       授权给某个用户

Grant connect,resource to 用户名; ( 只有用户有了 connect resource 后才能操作其他表 )

(3)       DBA 权限

Grant dba to 用户名;

4 撤权:  
        revoke  
权限 ...   from   用户名 ;

 

grant select on cwp_planned_move to fix_ngen;

 conn fix_ngen/fix_ngen@ngen

 create synonym cwp_virtual_quay_crane for ngendatasyst_main_hit.cwp_virtual_quay_crane;

conn fixdevusr/fixdevusr@fix

 create synonym cwp_planned_move for cwp_planned_move@fix_2_ngen ;

 

 

CREATE SEQUENCE

CREATE SEQUENCE — 创建一个新的序列号生成器

语法

CREATE SEQUENCE seqname

 [ INCREMENT increment

 ]
     [ MINVALUE minvalue

 ] [ MAXVALUE maxvalue

 ]
     [ START start

 ] [ CACHE cache

 ] [ CYCLE ]

描述

CREATE SEQUENCE 将向当前数据库里增加一个新的序列号生成器.包括创建和初始化一个新的名为 seqname 的单行表.生成器将为使用此命令的用户"所有".

在序列创建后,你可以使用函数 nextval(seqname ) 从序列中获得新的数字.函数 currval('seqname ') 可用于获取对当前会话中指定序列的上一次 nextval(seqname ) 调用返回的数字.函数 setval('seqname ', newvalue ) 可用于设置指定的序列的当前值.下一次 nextval(seqname ) 调用将返回所给的值加上序列增值.

使用象

SELECT * FROM sequence_name;
这样的查询可以获得序列的参数.除了获取最初的参数外,你可以用
SELECT last_value FROM sequence_name;
获得后端分配的最后一个值.你可以使用

底层的锁定用于令多个请求同时调用生成器成为可能.

注意
如果用语序列对象的缓存的设置大于一,而且该对象可能被多个后端同时使用就有可能产生不可预料的结果.每个后端在访问过序列对象并递增序列对象的最后值后,将分配跟在序列值后面"缓存数".这样,该后端在下面的(缓存数-1)次返回序列值时将使用预分配好的数值,而不对共享对象做任何更新.所以,已经分配但在当前会话中没有使用的数字将会丢失.而且,尽管多个后端保证分配独立的序列值,当考虑所有的后端时该数值却有可能是乱序的.(例如,设置缓存数为10,后端 A 可能保留数值 1..10 并且返回 nextval=1,而后端 B 可能保留数值 11..20 并在后端A生成nextval=2之前返回 nextval=11.)因此,将缓存数设为一可以安全地假设 nextval 的数值是顺序生成的;当缓存数设置大于一,我们只能假设 nextval 值都是独立的,而不能假设它们都是纯粹顺序生成的.同样,last_value 将反映由任何后端保留的最后数值,不管它是不是nextval曾返回过的.

注意

请参考 DROP SEQUENCE 语句来删除序列.

每个后端使用其自身的缓存来存储分配的数字.已分配但当前会话没有使用的数字将丢失,导致序列里面出现"空洞".

用法

创建一个叫 serial 的递增序列,从101开始:
CREATE SEQUENCE serial START 101;
从此序列中选出下一个数字
SELECT NEXTVAL ('serial');
     
nextval
-------
     114
在一个 INSERT 中使用此序列:
INSERT INTO distributors VALUES (NEXTVAL('serial'),'nothing');
在一个 COPY FROM 后设置序列:
CREATE FUNCTION distributors_id_max() RETURNS INT4
     AS 'SELECT max(id) FROM distributors' 
     LANGUAGE 'sql';
BEGIN;
     COPY distributors FROM 'input_file';
     SELECT setval('serial', distributors_id_max());
END;

兼容性

SQL92

CREATE SEQUENCEPostgres 语言扩展.在 SQL92 里没有 CREATE SEQUENCE 语句.
在Oracle数据库中,sequence等同于序列号,每次取的时候sequence会自动增加,一般会作用于需要按序列号排序的地方。

  1、Create Sequence

  (注释:你需要有CREATE SEQUENCE或CREATE ANY SEQUENCE权限)

  CREATE SEQUENCE emp_sequence

  INCREMENT BY 1 -- 每次加几个

  START WITH 1 -- 从1开始计数

  NOMAXVALUE -- 不设置最大值

  NOCYCLE -- 一直累加,不循环

  CACHE 10;

  只要定义了emp_sequence,你就可以用使CURRVAL,NEXTVAL

  CURRVAL=返回 sequence的当前值

  NEXTVAL=增加sequence的值,然后返回 sequence 值

  例如:

  emp_sequence.CURRVAL

  emp_sequence.NEXTVAL

  可以使用sequence的地方:

  · 不包含子查询、snapshot、VIEW的 SELECT 语句

  ·INSERT语句的子查询中

  ·NSERT语句的VALUES中

  ·UPDATE 的 SET中

  可以看如下例子:

  INSERT INTO emp VALUES

  (empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);

  SELECT empseq.currval FROM DUAL;

  需要注意的是:

  第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次 SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就会是不一样的。

  - 假如指定CACHE值,Oracle就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,Oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。

  2、Alter Sequence

  你需要有sequence的owner,或者拥有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create .

  Alter sequence示例:

  ALTER SEQUENCE emp_sequence

  INCREMENT BY 10

  MAXVALUE 10000

  CYCLE -- 到10000后从头开始

  NOCACHE ;

  可以影响Sequence的初始化参数:

  SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。

  简单的Drop Sequence

  DROP SEQUENCE order_seq;
评论

相关推荐

    oracle基础教程

    1.3.6 同义词(Synonym) 19 1.3.7 序列(Sequence) 19 1.3.8 数据库链(Database Link) 20 第2章 管理ORACLE数据库 21 2.1 基本概念 21 2.1.1 数据字典 21 2.1.2 事务管理 23 2.1.3 数据库管理员(DBA) 24 2.1.4 ...

    jfsky.com-Oracle数据库基础知识

    1.3.6 同义词(Synonym) 19 1.3.7 序列(Sequence) 19 1.3.8 数据库链(Database Link) 20 第2章 管理ORACLE数据库 21 2.1 基本概念 21 2.1.1 数据字典 21 2.1.2 事务管理 23 2.1.3 数据库管理员(DBA) 24 2.1.4 ...

    Oracle中创建表,创建序列,创建自增字段,添加注释, 添加记录,添加触发器,提交

    序列(Sequence)是一种数据库对象,用于生成唯一的数字标识符。序列可以用于生成主键、唯一标识符等。在上面的示例代码中,创建了一个名为 `Car_GUID` 的序列,用于生成自增字段 `GUID` 的值。 自增字段(Auto ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     实体权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。主要包括select, update, insert, alter, index, delete, all其中all包括所有权限。  授予实体权限 用法:grant 实体权限1...

    ORACLE数据库基础知识-华为维护资料

    1.3.5 同义词(Synonym) 16 1.3.6 序列(Sequence) 17 1.3.7 数据库链(Database Link) 17 第2章 管理ORACLE数据库 19 2.1 启动与关闭 19 2.1.1 权限 19 2.1.2 ORACLE的四中状态 20 2.1.3 启动数据库 20 2.1.4 ...

    Oracle基本语法

    作为初学者,整理学习文档是个好习惯,这篇小记是关于oracle权限操作,方案,序列,同义词,序列的基本语法

    orcale常用命令

    查看当前用户的系统权限和表级权限 SQL>select * from user_sys_privs; SQL>select * from user_tab_privs; 2、表 查看用户下所有的表 SQL>select * from user_tables; 查看名称包含log字符的表 SQL>...

    Oracle8i_9i数据库基础

    §4.3 序号(sequence) 146 §4.3.1 建立序号 146 §4.3.2 修改序号 147 §4.3.3 使用序号 147 §4.3.4 删除序号 147 §4.4 同义词 148 §4.4.1 建立同义词 148 §4.4.2 删除同义词 149 §4.5 视图、同义词和序列有关...

    Oracle事例

    查看当前用户的系统权限和表级权限 SQL>select * from user_sys_privs; SQL>select * from user_tab_privs; 查看用户下所有的表 SQL>select * from user_tables; <7> alter user语句的quota子句限制用户的磁盘...

    最全的oracle常用命令大全.txt

    查看当前用户的系统权限和表级权限 SQL>select * from user_sys_privs; SQL>select * from user_tab_privs; 2、表 查看用户下所有的表 SQL>select * from user_tables; 查看名称包含log字符的表 SQL>...

Global site tag (gtag.js) - Google Analytics