在Oracle中使列可选

时间:2013-11-29 21:14:20

标签: sql oracle

我有一点甲骨文困境。

我有一个由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;

1 个答案:

答案 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;