我有一点甲骨文困境。
我有一个由5列组成的表:一个PK,两个FK,一个INT值和一个Date。 我也为我的PK设置了一个序列。 我设置了一个触发器,用一个自动递增的值替换PK,将Date替换为当前日期,这样你就可以输入值(null,FK,FK,INT,null),但我想知道是否有办法修改我的触发器,以便我可以简单地输入(FK,FK,INT)? (显然)如果我只输入3个值,我会得到ORA-00947:没有足够的值错误。
CREATE or REPLACE trigger TRIG_new_product
before insert on product
for each row
BEGIN
SELECT sq_product.nextval, sysdate
into :new.productID, :new.productDate
FROM dual;
END TRIG_new_product;
答案 0 :(得分:5)
如果您不想为列提供值,请不要在insert语句中列出:
insert into product
(fk_column, fk_column, int_column)
values
(42, 24, 4224);
错误消息“不够”值与您的触发器无关,可能源于您未在insert语句中指定列的事实。在这种情况下,您有为每列提供值。你可能做过这样的事情:
insert into product -- no columns specified therefore all are required
values
(42, 24, 4224);
当然,在插入期间省略列仅在它们被定义为可为空时才有效。
顺便说一下:您的触发器可以写得更简单一些:
CREATE or REPLACE trigger TRIG_new_product
before insert on product
for each row
BEGIN
:new.productID := sq_product.nextval;
:new.productDate := sysdate;
END TRIG_new_product;