首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql脚本不运行

sql脚本不运行
EN

Stack Overflow用户
提问于 2017-09-14 12:16:07
回答 1查看 45关注 0票数 0

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

代码语言:javascript
复制
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_SOURCE_SYSTEM_METADATA *第1行中的错误: ORA-00942:表或视图不存在 SYSTEM_ID数字(4)非空t1_seq.nextval,*第3行错误: ORA-00907:缺少右括号

找不到错误,有人能帮忙吗??

EN

回答 1

Stack Overflow用户

发布于 2017-09-14 12:24:03

代码语言:javascript
复制
SYSTEM_ID NUMBER(4) NOT NULL t1_seq.nextval,

t1_seq.nextval段无效-您不能指定这样的自动递增列。

SQL解析器希望看到:

代码语言:javascript
复制
SYSTEM_ID NUMBER(4) NOT NULL,

并抛出异常,因为逗号不是它期望的位置。

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

  1. 使用statement语句中的序列;
  2. 使用触发器插入正确的序列值;或
  3. 创建一个存储过程来处理插入并通过该存储过程管理序列(不允许可能绕过此操作的直接插入)。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46218885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档