简单说一下楼上的问题吧,估计还会有人详尽解答
1 sequence是序列,但是不同于SQL SERVER indentity,是可以用PL/SQL,单独调用的,和表没有直接的关系,就是每调用一次sequence的值就会增加
SQL> select ASSETCATEGORIES_SEQ.nextval from dual; NEXTVAL
----------
1SQL> /
NEXTVAL
----------
2
SQL> / NEXTVAL
----------
32 先DROP后CREATE不是必须的,如果以前没有,可以不用DROP,目的是先清除掉前ASSETCATEGORIES_SEQ名称序列,不然后建立ASSETCATEGORIES_SEQ会报错误,这根据具体情况定了3 一般序列的用法
INSERT INTO TABLE_NAME (ID,...)
VALUES(ASSETCATEGORIES_SEQ.NEXTVAL,...)4 SQLSERVER不熟悉
1 sequence是序列,但是不同于SQL SERVER indentity,是可以用PL/SQL,单独调用的,和表没有直接的关系,就是每调用一次sequence的值就会增加
SQL> select ASSETCATEGORIES_SEQ.nextval from dual; NEXTVAL
----------
1SQL> /
NEXTVAL
----------
2
SQL> / NEXTVAL
----------
32 先DROP后CREATE不是必须的,如果以前没有,可以不用DROP,目的是先清除掉前ASSETCATEGORIES_SEQ名称序列,不然后建立ASSETCATEGORIES_SEQ会报错误,这根据具体情况定了3 一般序列的用法
INSERT INTO TABLE_NAME (ID,...)
VALUES(ASSETCATEGORIES_SEQ.NEXTVAL,...)4 SQLSERVER不熟悉
解决方案 »
- 关于数据库(数据仓库)设计的问题
- oracle进行主备数据库切换
- 美资公司招Oracle DBA工程师(上海)
- 求一个SQL语句
- 10g的oracle还有那个企业管理器没有?~~
- asp用Oracle做数据库总感觉有很多问题。。是不是兼容性不好?
- 关于java操作oracle日期字段的问题,请帮忙!
- 问题:一次更新好多行的????
- C#中如何调用存储过程,函数?
- 求助:UTL_FILE.FOPEN 打开文件名是中文的文件,出错
- 请高手写一个SQL,有一个表A,根据某种条件选出若干条记录,其中每一条记录都与另外一个表B中若干条记录相关联,我现在想在A的没一条记录
- 请大家帮我看看这样的触发器怎么写
我是第一次弄这个东西,还是不清楚sequence的作用是什么?
有点类是sqlserver得identitysqlserver中只要有个自定义增长列就可以了如果oracle中需要有个类似的列,就可以用序列
我尽量说的详细点.
drop sequence ASSETCATEGORIES_SEQ;
create sequence ASSETCATEGORIES_SEQ;create table ASSETCATEGORIES (
ID numeric(7) not null,
PARENTID numeric(7) null,
CODE nvarchar(30) not null,
NAME nvarchar(30) not null,
REMARK nvarchar(100) null,
constraint PK_AssetCate primary key (ID)
)
go
1)这个应该是ORACLE的东西,里面的sequence我在网上查了好多,说是序列,不是很明白是什么意思.我只知道SQL里indentity可以设置一个字段为自增的.
2)这个为什么要先DROP,后CREATE呢?
---如果不删除有的,再建的时候不就冲突了么
建表的时候也一样,自动导出的语句都是先删除,在创建
3)这个ASSETCATEGORIES_SEQ,这里创建了一个,但是我不知道它什么时候用到的?
还是这里只是创建了还没有用到?
--这里只是创建,还没有用到
ASSETCATEGORIES.id的值可以用序列来实现
例如 insert into ASSETCATEGORIES(id...)
values(ASSETCATEGORIES_SEQ.nextval...)4)我的这段如果该成SQL的话要怎么改呢?
sqlserver里面只要定义一个自增长的列就可以了,不用这么麻烦建序列的
Oracle里没有标识列这种说法的,只有序列;在oracle中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;
我现在要把这个改成SQL的,要怎么改呢?
你是想把建表的语句改成sqlserverif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ASSETCATEGORIES ') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[ASSETCATEGORIES ]
GOCREATE TABLE [dbo].[ASSETCATEGORIES ] (
[ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL ,
PARENTID int(7) null,
CODE varchar(30) not null,
NAME varchar(30) not null,
REMARK varchar(100) null
) ON [PRIMARY]
GOALTER TABLE [dbo].[ASSETCATEGORIES ] WITH NOCHECK ADD
CONSTRAINT [PK_ASSETCATEGORIES ] PRIMARY KEY CLUSTERED
(
[ID]
) WITH FILLFACTOR = 90 ON [PRIMARY]
GO
这句话的意思是修改 STATE 上的约束 ,约束名为 CONCRETEBOOKS,让其默认的值为0吗?
是修改表CONCRETEBOOKS上的列STATE,让其默认的值为0吗?