我有一点甲骨文困境.
我有一个由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;
Run Code Online (Sandbox Code Playgroud)
如果您不想为列提供值,请不要在insert语句中列出它:
insert into product
(fk_column, fk_column, int_column)
values
(42, 24, 4224);
Run Code Online (Sandbox Code Playgroud)
错误消息"不够"值与您的触发器无关,可能源于您未在insert语句中指定列的事实.在这种情况下,您必须为每列提供一个值.你可能做过这样的事情:
insert into product -- no columns specified therefore all are required
values
(42, 24, 4224);
Run Code Online (Sandbox Code Playgroud)
当然,在插入期间省略列仅在它们被定义为可空时才有效.
顺便说一句:您的触发器可以写得更简单一些:
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
698 次 |
| 最近记录: |