Oracle sql脚本未运行

Oracle sql脚本未运行,oracle,sequence,Oracle,Sequence,下面是一个sql脚本的代码片段,它给了我一个错误,我必须在表的主键上生成一个序列,而不使用oracle中的触发器: CREATE SEQUENCE t1_seq START WITH 1 INCREMENT BY 1; DROP TABLE CPR_SOURCE_SYSTEM_METADATA; CREATE TABLE CPR_SOURCE_SYSTEM_METADATA ( SYSTEM_ID NUMBER(4) NOT NULL t1_seq.nex

下面是一个sql脚本的代码片段,它给了我一个错误,我必须在表的主键上生成一个序列,而不使用oracle中的触发器:

CREATE SEQUENCE t1_seq START WITH 1 INCREMENT BY 1;

DROP TABLE CPR_SOURCE_SYSTEM_METADATA;

CREATE TABLE CPR_SOURCE_SYSTEM_METADATA 

   (    
         SYSTEM_ID NUMBER(4) NOT NULL t1_seq.nextval,

         SYSTEM_NAME VARCHAR2(200),

         DATE_FORMAT VARCHAR2(200),

         CREATED_BY VARCHAR2(200),
         MODIFIED_BY VARCHAR2(200),
         CREATED_ON NUMBER(20),
         MODIFIED_ON NUMBER(20),
         IS_DELETED VARCHAR2(1),
         CONSTRAINT "CPR_SOURCE_SYSTEM_PK" PRIMARY KEY ("SYSTEM_ID")
 );
它给了我以下错误:

删除表CPR\u源\u系统\u元数据 *第1行错误:ORA-00942:表或视图不存在

系统ID号(4)不为空t1, *第3行错误:ORA-00907:缺少右括号

无法找出错误,有人能帮忙吗

SYSTEM_ID NUMBER(4) NOT NULL t1_seq.nextval,
t1_seq.nextval
段无效-不能指定这样的自动递增列

SQL解析器希望看到:

SYSTEM_ID NUMBER(4) NOT NULL,
并抛出异常,因为逗号不是它期望的位置

在Oracle 12c中,您可以使用,但在早期版本中,您需要:

  • 使用SQL insert语句中的序列
  • 使用触发器插入正确的序列值;或
  • 创建一个存储过程来处理插入,并通过该过程来管理序列(不允许直接插入,因为直接插入可能会绕过此过程)
  • t1_seq.nextval
    段无效-不能指定这样的自动递增列

    SQL解析器希望看到:

    SYSTEM_ID NUMBER(4) NOT NULL,
    
    并抛出异常,因为逗号不是它期望的位置

    在Oracle 12c中,您可以使用,但在早期版本中,您需要:

  • 使用SQL insert语句中的序列
  • 使用触发器插入正确的序列值;或
  • 创建一个存储过程来处理插入,并通过该过程来管理序列(不允许直接插入,因为直接插入可能会绕过此过程)

  • 不能在创建表中直接指定序列名称。在Oracle 12c中,还可以声明标识列。对于所有其他版本,您可以使用触发器。请参阅可能的重复项,这意味着我们不需要专门创建任何序列?在12c中,如果您希望使用显式创建的序列,而不是标识,可以使用默认的sequence.nextval。在这种情况下,
    系统ID号(4)不为空默认t1\u seq.nextval
    。不能在创建表中直接指定序列名称。在Oracle 12c中,还可以声明标识列。对于所有其他版本,您可以使用触发器。请参阅可能的重复项,这意味着我们不需要专门创建任何序列?在12c中,如果您希望使用显式创建的序列,而不是标识,可以使用默认的sequence.nextval。在这种情况下,
    系统ID号(4)不为空默认t1\u seq.nextval