oracle怎么给表创sequence,在oracle中使用sequence.nextval创build表

Oracle 12c

现在我们终于有了像许多其他数据库一样的IDENTITY列,以便在后台自动生成一个序列。 这个解决scheme比基于触发器的解决scheme快得多, 正如在这篇博客文章中可以看到的 。

所以,你的表的创build将如下所示:

CREATE TABLE qname ( qname_id integer GENERATED BY DEFAULT AS IDENTITY (START WITH 1) NOT NULL PRIMARY KEY, qname VARCHAR2(4000) NOT NULL -- CONSTRAINT qname_uk UNIQUE );

Oracle 11g及以下

根据文件 ,你不能这样做:

对默认列值的限制DEFAULTexpression式不能包含对PL / SQL函数或其他列的引用,也不能包含未完全指定的伪列CURRVAL,NEXTVAL,LEVEL,PRIOR和ROWNUM或date常量。

在Oracle中使用“自动增量”列的标准方法是使用触发器,例如

CREATE OR REPLACE TRIGGER my_trigger BEFORE INSERT ON qname FOR EACH ROW -- Optionally restrict this trigger to fire only when really needed WHEN (new.qname_id is null) DECLARE v_id qname.qname_id%TYPE; BEGIN -- Select a new value from the sequence into a local variable. As David -- commented, this step is optional. You can directly select into :new.qname_id SELECT qname_id_seq.nextval INTO v_id FROM DUAL; -- :new references the record that you are about to insert into qname. Hence, -- you can overwrite the value of :new.qname_id (qname.qname_id) with the value -- obtained from your sequence, before inserting :new.qname_id := v_id; END my_trigger;

在文档中阅读有关Oracle TRIGGER的更多信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值