在Oracle中使列可选

Ang*_*mba 1 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;
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 5

如果您不想为列提供值,请不要在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)