在为oracle数据库列创建表时,如何使用缺省主键作为序列值

时间:2014-01-22 12:21:38

标签: database plsql primary-key default

我们有一个工具,这个工具创建了一些插入脚本来在我们的plsql表中添加行。 这个脚本不可修改,我们看不到这个脚本。所以,

当数据行到来时(我们不知道结构的插入脚本),我们应该给出一个主键。我们可以使用触发器,但出于性能原因我们不希望这样做。

下面的代码不起作用。

CREATE TABLE qname
  (
    qname_id integer NOT NULL default qname_id_seq.nextval PRIMARY KEY,
   );

有什么想法吗? 感谢..

1 个答案:

答案 0 :(得分:2)

.nextval不能在表的默认值中使用,当您想要任何人都可以轻松阅读/记住/理解的序列号时,这可以通过TriggerSequence来实现。但是如果你不想通过这种方式管理ID列(比如qname_id),并且这个列的值不是很大,你可以在Table Creation中使用SYS_GUID()来获得这样的自动增量。

CREATE TABLE qname 
(qname_id RAW(16) DEFAULT SYS_GUID() PRIMARY KEY,
name VARCHAR2(30));

(或通过修改列)

现在,您的qname_id列将接受“全球唯一标识符值”。 您可以通过忽略emp_id列来在表中插入值。

INSERT INTO qname (name) VALUES ('name value');

因此,它会为您的qname_id列插入唯一值。