【发布时间】:2026-01-20 15:50:01
【问题描述】:
我想在不使用序列的情况下创建主键,但我不介意使用触发器。 我正在使用 oracle 11gR2。 我的脚本包含以下内容。 一种。创建表(dept2) 湾。插入样本数据 C。创建触发器(查找最大值,加 1,插入) d。插入另一条记录(触发器应该触发) 它给出了上述错误。 下面是我的脚本。
drop table dept2 ;
create table dept2
(
deptno number(2),
dname varchar2(20),
mgr number(3)
) ;
insert into dept2 values (11, 'a', 23) ;
insert into dept2 values (12, 'b', 24) ;
select * from dept2 ;
CREATE OR REPLACE TRIGGER trig_deptno2
BEFORE INSERT ON dept2
FOR EACH ROW
DECLARE v_deptno NUMBER(2) ;
BEGIN
SELECT MAX(deptno) INTO v_deptno
FROM dept2 ;
INSERT INTO dept2 VALUES
((v_deptno + 1), :NEW.dname, :NEW.mgr) ;
END trig_deptno2 ;
/
SHOW ERR
L
insert into dept2 (dname, mgr) values ('d', 24) ;
select * from dept2 ;
L
谁能告诉我错误在哪里或如何纠正错误?
【问题讨论】:
-
“我想在不使用序列的情况下创建主键” - 你能解释一下吗?
-
所以你正在插入一个表并且插入会导致一个触发器被调用,这会导致另一行被插入,并且插入会导致一个触发器被调用,这会导致另一行被插入并且插入会导致一个调用触发器,导致插入另一行,插入导致调用触发器,导致插入另一行,插入导致调用触发器,导致插入另一行,插入导致调用触发器导致插入另一行,插入导致调用触发器,导致 ...