![](/img/trans.png)
[英]Oracle 11g: add a column to an EXISTING table with auto increment long value
[英]Make value of a DB column auto increment by 1 in Oracle 11g
我有Oracle DB 11g企业版,我想通过从以下文件中读取sql脚本来创建表:
CREATE SEQUENCE VerHist_SeqNum
START WITH 1
INCREMENT BY 1;
CREATE TABLE VerHist
(
SequenceNumber NUMBER(10,0) NOT NULL,
SQLFileName VARCHAR2(100) NOT NULL,
STATUS VARCHAR2(10) NOT NULL,
AppliedDate DATE NOT NULL,
DateCreated DATE
DEFAULT (SYSDATE),
DateUpdated DATE
DEFAULT (SYSDATE),
CONSTRAINT PK_VerHist PRIMARY KEY( SequenceNumber ),
CONSTRAINT UC_VerHist_SQLFileNa UNIQUE( SQLFileName )
);
CREATE OR REPLACE TRIGGER VerHist_SeqNum_TRG
BEFORE INSERT
ON VerHist
FOR EACH ROW
BEGIN
:NEW.SequenceNumber := VerHist_SeqNum.NEXTVAL;
END;
通过java代码,我正在阅读sql脚本,然后执行以下3个查询:
我已经通过从我的MS SQL Server脚本转换创建了这个sql脚本,在这种情况下我只需运行一个查询而不是3。
我的问题是,是否可以不将Sequence
和Trigger
仅用于自动增量目的,我可以简单地修改我的Create table
查询来执行此操作,就像使用CONSTRAINT在MS SQL中完成一样。
我想这样做是因为如果我删除表并创建新表,那么我希望序列从1重新启动,而在当前场景中它不会。
对于Oracle 11g
,您必须使用您使用的方法。 没有可用的自动增量功能,可帮助您取消序列和触发器。
如您所说,您可能希望删除表,并希望序列从1开始,为此,您需要重新创建序列,以便它以所需的值开始。
启动Oracle 12c,可以使用IDENTITY列,它可以帮助您实现自动增量功能。 有关更多详细信息,请参阅此处
不,这是不可能的。
可以在此处找到在Oracle中创建表的语法图: http : //docs.oracle.com/cd/E11882_01/server.112/e41084/statements_7002.htm
从Oracle查看此规范,很容易看出CREATE TABLE
语句不允许创建序列或触发器作为创建表的一部分(实际上,每个任务 - 创建表,创建序列,并创建一个触发器 - 在Oracle中被视为单独的DDL命令); Oracle也不允许为列定义这样的约束。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.