【问题标题】:Error in primary key in sqlplus?sqlplus中的主键错误?
【发布时间】:2023-03-14 02:37:01
【问题描述】:

我是 sql 的初学者。我正在使用 sqlplus 运行 sql 查询。我使用了简单的查询,但它显示像 "MISSING RIGHT PARENTHESIS" 这样的错误。我的目标是创建自动增量主关键。谁能解决这个错误?在此先感谢...

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

【问题讨论】:

  • 您使用的是哪种 SQL? “sqlplus”暗指 Oracle,但“identity”是 SQL Server 概念。它们不会混合。
  • @Stilgar - Oracle 12c 现在有一个身份概念,但 OP 使用的语法仍然是 SQL Server 的版本,而不是 Oracles。
  • 自从Oracle有IDENTITY(1, 1)???阅读文档!!!

标签: sql oracle ddl


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    在 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.

    【讨论】:

      猜你喜欢
      • 2012-12-28
      • 1970-01-01
      • 2014-05-22
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多