sqlplus中主键出错?

时间:2018-03-09 16:18:16

标签: sql oracle ddl

我是sql的初学者。我使用sqlplus来运行sql查询。我使用了简单的查询,但它显示的错误如" MISSING RIGHT PARENTHESIS" 。我的目标是创建自动增量主键。任何人都可以解决错误吗?提前感谢...

create table student(rollno int identity(1,1) primary key,
                     name varchar(20),marks int);

2 个答案:

答案 0 :(得分:0)

对于Oracle,rollno列可以定义为NUMBER(0010)和主键。 然后,您需要添加一个ON INSERT触发器来从SEQUENCE填充rollno。该网站上有许多触发器和序列样本。

答案 1 :(得分:0)

在oracle 12中,您可以使用标识列自动填充您的ID

CREATE TABLE students
(
    "ID" NUMBER GENERATED BY DEFAULT AS IDENTITY MINVALUE 1 MAXVALUE 9999999999 
    INCREMENT BY 1 START WITH 1 , 
    "NAME" VARCHAR2(20), 
    "MARKS" NUMBER(2,0),
    CONSTRAINT PK_STUDENTS PRIMARY KEY (ID) ENABLE 
);
/

这会创建一个不需要任何触发器的表,并自动填充id列(未指定值),下一个数字最多为99999 ...

如果您正在使用oracle 11及更低版本,则需要在插入时触发,并为id列指定一个值(custom_sequence.nextval)。

CREATE TABLE students
(
    "ID" NUMBER(5,0) not null,
    "NAME" VARCHAR2(20),
    "MARKS" NUMBER(2,0),
    CONSTRAINT PK_STUDENTS PRIMARY KEY (ID) ENABLE 
);
/

CREATE SEQUENCE SEQ_STUDENTS INCREMENT BY 1 START WITH 1;
/
TRIGGER TC_students
before insert on students
for each row
begin
    if (:new.id is null) then
        select SEQ_students.nextval into :new.id from dual;
    end if;
end;
/

And please use VARCHAR2.