Oracle10g 触发序列问题
我有一个序列:Oracle10g 触发序列问题,oracle10g,Oracle10g,我有一个序列: CREATE SEQUENCE test_seq START WITH 10000001 INCREMENT BY 1; 和一张桌子: create table Entry( id number(5), name varchar(50) ); 在条目表中插入一行之后,我需要增加sequence的值。所以我这样做了: CREATE OR REPLACE TRIGGER test_trigger after INSERT ON Entry REFERENCING NEW AS
CREATE SEQUENCE test_seq START WITH 10000001 INCREMENT BY 1;
和一张桌子:
create table Entry(
id number(5),
name varchar(50) );
在条目表中插入一行之后,我需要增加sequence的值。所以我这样做了:
CREATE OR REPLACE TRIGGER test_trigger
after INSERT
ON Entry
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT test_seq.nextval INTO :NEW.id FROM dual;
END;
/
但是之后的“”在这里不起作用,而在之前的“”起作用。如何在之后执行此操作?通常,在INSERT语句中调用sequence.nextval:
INSERT INTO your_table
(id, ...)
VALUES
(test_seq.nextval, ...)
是否设置了使用触发器?通常,在INSERT语句中调用sequence.nextval:
INSERT INTO your_table
(id, ...)
VALUES
(test_seq.nextval, ...)
是否已设置使用触发器?根据,在使用插入后触发器时,不能更新:新值。对不起 根据,使用插入后触发器时不能更新:新值。对不起 如果你真的想在插入后增加序列(这似乎很奇怪),你可以这样做:
CREATE OR REPLACE TRIGGER test_trigger
after INSERT
ON Entry
REFERENCING NEW AS NEW
FOR EACH ROW
DECLARE
l_id INTEGER;
BEGIN
SELECT test_seq.nextval INTO l_id FROM dual;
END;
/
当然,这不会将新行的ID设置为该序列值——但是如果您想这样做,您应该将其设置为BEFORE触发器 如果你真的想在插入后增加序列(这似乎很奇怪),你可以这样做:
CREATE OR REPLACE TRIGGER test_trigger
after INSERT
ON Entry
REFERENCING NEW AS NEW
FOR EACH ROW
DECLARE
l_id INTEGER;
BEGIN
SELECT test_seq.nextval INTO l_id FROM dual;
END;
/
当然,这不会将新行的ID设置为该序列值——但是如果您想这样做,您应该将其设置为BEFORE触发器 我不明白为什么要在插入后增加序列;这样做会丢失大量的值,因为在会话调用NEXTVAL一次之前,无法在会话中查询序列的上下文CURRVAL 运行以下命令将引发ORA-08002:
create sequence s1;
select s1.currval from dual;
那么,您使用插入后触发器对其进行编码的方式,entry.id的第一个值来自何处?我不明白您为什么要在插入后增加序列;这样做会丢失大量的值,因为在会话调用NEXTVAL一次之前,无法在会话中查询序列的上下文CURRVAL 运行以下命令将引发ORA-08002:
create sequence s1;
select s1.currval from dual;
那么,按照您使用插入后触发器对其进行编码的方式,entry.id的第一个值来自何处?为什么?当序列递增时会有什么区别?为什么?当序列递增时会有什么区别?