sql脚本没有运行

时间:2017-09-14 12:16:08

标签: oracle sequence

这是一个sql脚本的代码片段,它给了我错误,我必须在表的primary_key上生成一个序列,而不使用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")
 );

它给了我以下错误:

  

DROP TABLE CPR_SOURCE_SYSTEM_METADATA              *第1行的错误:ORA-00942:表或视图不存在

     

SYSTEM_ID NUMBER(4)NOT NULL t1_seq.nextval,                                                 *第3行的错误:ORA-00907:缺少右括号

无法找出错误,任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

SYSTEM_ID NUMBER(4) NOT NULL t1_seq.nextval,

t1_seq.nextval段无效 - 您无法指定自动递增列。

SQL解析器期望看到:

SYSTEM_ID NUMBER(4) NOT NULL,

并抛出异常,因为逗号不在预期的位置。

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

  1. 使用SQL insert语句中的序列;
  2. 使用触发器插入正确的序列值;或
  3. 创建一个存储过程来处理插入并通过它来管理序列(禁止可以绕过此插入的直接插入)。