Oracle 11g 中的学习者。我在将一些行插入到由主/外键关系链接的两个表中时遇到问题。
基本上我创建了一个从 1000 开始并以 1 递增的序列。
然后创建一个带有 ST_ID 列的“STORE”表
ST_ID 列通过 TRIGGER 链接到 SEQUENCE。
然后我有一个“EMPLOYEE”表,其中有一个 EST_ID 字段,该字段是 STORE 表中 ST_ID 列的外键。
但是,当我尝试插入行时,我最初收到一条错误消息,指出 EST_ID 不能为空。所以我为 EST_ID 创建了一个序列和触发器,现在我收到一条错误消息,指出违反了外键约束。
我认为那可能是错误的做法。我真的希望 E_ID 和 EST_ID 相同吗?我该如何实现?用某种触发器?
实际代码:
CREATE SEQUENCE "STORSEQ" MINVALUE 1000 MAXVALUE 9999 INCREMENT BY 1 START WITH 1000 NOCACHE NOORDER
NOCYCLE ;
CREATE TABLE "STORE"
( "ST_ID" CHAR(4) NOT NULL ENABLE,
"STADDR_ID" CHAR(4) NOT NULL ENABLE,
CONSTRAINT "STORE_PK" PRIMARY KEY ("ST_ID") ENABLE
) ;
CREATE TABLE "EMPLOYEE"
( "E_ID" CHAR(8) NOT NULL ENABLE,
"EF_NAME" VARCHAR2(20) NOT NULL ENABLE,
"EL_NAME" VARCHAR2(20) NOT NULL ENABLE,
"EST_ID" CHAR(4) NOT NULL ENABLE,
CONSTRAINT "EMPLOYEE_PK" PRIMARY KEY ("E_ID") ENABLE
) ;
alter table "EMPLOYEE" add CONSTRAINT "EMPLOYEE_CON" foreign key ("EST_ID") references
"STORE" ("ST_ID")
/
CREATE OR REPLACE TRIGGER "BI_STORE"
before insert on "STORE"
for each row
begin
if :NEW."ST_ID" is null then
select "STORSEQ".nextval into :NEW."ST_ID" from dual;
end if;
end;
/
目前我的 INSERT 代码如下所示:
INSERT INTO STORE
(ST_ID, STADDR_ID)
VALUES
(DEFAULT, DEFAULT);
INSERT INTO EMPLOYEE
(EF_NAME, EL_NAME)
VALUES
('James', 'Smith');