2014-03-24 28 views
0

我想AUTO_INCREMENT下表中的cust_id字段:PL/SQL错误的AUTO_INCREMENT

CREATE TABLE A113222813_CUSTOMERS (
CUST_ID NUMBER(10) PRIMARY KEY, 
CUST_FNAME VARCHAR2(20), 
CUST_SNAME VARCHAR2(20), 
CUST_UNAME VARCHAR2(30) NOT NULL, 
CUST_PASS VARCHAR2(40) NOT NULL 
) 

我创建下列顺序和触发器来处理这个问题:

CREATE SEQUENCE CUST_SEQ START WITH 1 INCREMENT BY 1 NOCYCLE; 

CREATE OR REPLACE TRIGGER CUST_TRG 
BEFORE INSERT ON A113222813_CUSTOMERS 
FOR EACH ROW 
BEGIN 
:NEW.CUST_ID := CUST_SEQ.NEXTVAL; 
END; 

但它一直抛出以下错误:

Error(2,30): PLS-00357: Table,View Or Sequence reference 'CUST_SEQ.NEXTVAL' not allowed 
in this context 

任何想法我做错了什么?

+3

您确定您使用的是11g吗?如果您使用的早期版本的Oracle不支持在这种直接分配中使用序列,那么您得到的错误将非常有意义。但是你已经专门为11g标记了这个问题...... –

+2

这个语法在Oracle 11版本中是允许的,所以如果你在老版本的Oracle中工作,你应该使用SELECT CUST_SEQ.NEXTVAL到:来自dual的NEW.CUST_ID。 –

+0

就是这样。我很抱歉。根据我收到的手册,我的印象是10克,它是11克。谢谢! –

回答

0

这在11g之前是不可能的。您可以在11g的常规作业中使用sequence_name.NEXTVAL,而不是在此之前,并且由以下内容组成:

select CUST_SEQ.NEXTVAL into :NEW.CUST_ID from dual;