此处不允许使用 Oracle 列默认值 [重复]
Posted
技术标签:
【中文标题】此处不允许使用 Oracle 列默认值 [重复]【英文标题】:Oracle Column Not Allowed Here Default Value [duplicate] 【发布时间】:2015-11-02 12:24:11 【问题描述】:问题在于第 4 行使用序列的 DEFAULT 值。
CREATE OR REPLACE SEQUENCE CHANNEL_SEQ START WITH 1 INCREMENT BY 1;
CREATE TABLE "CHANNEL" (
"ID_CHANNEL" NUMBER(18,0) DEFAULT CHANNEL_SEQ.NEXTVAL,
"IS_ACTIVE" VARCHAR2(1 CHAR) NOT NULL,
"BATCH_SIZE" NUMBER(3,0) NOT NULL,
"MAX_DOCS_IN_PROCESS" NUMBER(4,0) NOT NULL,
"RECEIVER_ID" NUMBER(18,0) NOT NULL,
"LAST_POS_SESSION_TIME" DATE,
CONSTRAINT "PK_CHANNEL" PRIMARY KEY ("ID_CHANNEL"),
CONSTRAINT "FK_RECEIVER_ID_CHANNEL" FOREIGN KEY ("RECEIVER_ID") REFERENCES "MSG_OUT"("MSG_OUT_ID"),
CONSTRAINT "CHK_IS_ACTIVE" CHECK (IS_ACTIVE IN ('Y', 'N'))
);
错误信息是:
“SQL 错误:ORA-00984:此处不允许列”
欢迎所有帮助和提示。
【问题讨论】:
您使用的是哪个版本的 Oracle? @LalitKumarB 我不同意这个问题是重复的。这个关于列语法和问题的问题主要与不同版本的 oracle 允许或不允许这种语法的事实有关。这应该是这里的答案。现在,如何做到这一点 - 在此处的一个答案和链接的问题中进行了解释。所以,一个问题是如何,另一个问题是为什么 【参考方案1】:您不能使用seq.NEXTVAL
作为默认值。
为此(自动填充)您应该创建触发器,例如
CREATE OT REPLACE TRIGGER
BEFORE INSERT
ON CHANNEL
FOR EACH ROW
BEGIN
:NEW.ID_CHANNEL:=CHANNEL_SEQ.NEXTVAL;
END;
【讨论】:
@您的回答仅与某些版本的 Oracle 相关 仅在 Oracle 12g 之前。他们稍后添加了对此的支持。以上是关于此处不允许使用 Oracle 列默认值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章