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 ]
输入
seqname
将要创建的序列号名.
increment
INCREMENT increment
子句是可选的.一个正数将生成一个递增的序列,一个负数将生成一个递减的序列.缺省值是一(1).
minvalue
可选的子句 MINVALUE minvalue
决定一个序列可生成的最小值.缺省分别是递增序列为1递减为-2147483647.
maxvalue
使用可选子句 MAXVALUE maxvalue
决定序列的最大值.缺省的分别是递增为2147483647,递减为-1.
start
可选的 START start
子句
使序列可以从任意位置开始.缺省初始值是递增序列为 minvalue
递减序列为 maxvalue
.
cache
CACHE cache
选项使序列号预分配并且为快速访问存储在内存里面.最小值(也是缺省值)是1(一次只能生成一个值, 也就是说没有缓存).
CYCLE
可选的 CYCLE 关键字可用于使序列到达最大值(maxvalue)
或最小值(minvalue
)时可复位并继续下去.如果达到极限,生成的下一个数据将分别是最小值(minvalue)
或最大值(maxvalue).
输出
CREATE
命令成功执行的返回信息.
ERROR: Relation 'seqname
' already exists
如果声明的序列已经存在.
ERROR: DefineSequence: MINVALUE (start
) can't be >= MAXVALUE (max
)
如果声明的初始值超出范围(最大值),返回此信息.
ERROR: DefineSequence: START value (start
) can't be < MINVALUE (min
)
如果声明的初始值超出范围(最小值),返回此信息.
ERROR: DefineSequence: MINVALUE (min
) can't be >= MAXVALUE (max
)
如果最小值和最大值不连贯.
描述
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 SEQUENCE
是 Postgres
语言扩展.在 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;
分享到:
相关推荐
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 ...
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 ...
序列(Sequence)是一种数据库对象,用于生成唯一的数字标识符。序列可以用于生成主键、唯一标识符等。在上面的示例代码中,创建了一个名为 `Car_GUID` 的序列,用于生成自增字段 `GUID` 的值。 自增字段(Auto ...
实体权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。主要包括select, update, insert, alter, index, delete, all其中all包括所有权限。 授予实体权限 用法:grant 实体权限1...
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权限操作,方案,序列,同义词,序列的基本语法
查看当前用户的系统权限和表级权限 SQL>select * from user_sys_privs; SQL>select * from user_tab_privs; 2、表 查看用户下所有的表 SQL>select * from user_tables; 查看名称包含log字符的表 SQL>...
§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 视图、同义词和序列有关...
查看当前用户的系统权限和表级权限 SQL>select * from user_sys_privs; SQL>select * from user_tab_privs; 查看用户下所有的表 SQL>select * from user_tables; <7> alter user语句的quota子句限制用户的磁盘...
查看当前用户的系统权限和表级权限 SQL>select * from user_sys_privs; SQL>select * from user_tab_privs; 2、表 查看用户下所有的表 SQL>select * from user_tables; 查看名称包含log字符的表 SQL>...