高分求number型字段,怎么设置插入的值不能小于0,如果小于0,默认为0.

解决方案 »

  1.   

    我有一个表,库存表:stock,有一个字段:在途库存stock_way。我现在要限制这个字段的插入的值只能>=0,如果插入的值小于0,默认填充为0.
    STOCK_WAY             NUMBER(11,3)
      

  2.   


    alter table sc_tt_stock
    add Constraint stock_way_value check(stock_way >=0);晕,CSDN竟然还抵不过百度知道百度知道没给分,都有很多人回答。。
    现在在CSDN高分提的3个问题,都没人回答了。。
      

  3.   


    alter table sc_tt_stock
    add Constraint stock_way_value check(stock_way >=0);
      

  4.   

    CREATE TABLE test_check (
    check_num number
    )CREATE OR REPLACE TRIGGER tr_check_num 
    BEFORE INSERT 
    ON SCOTT.test_check
    FOR EACH ROW
        BEGIN 
                IF :NEW.checknum<0 THEN 
                    :NEW.checknum :=0;               
                END IF;
    END;insert into test_check values(-1);DROP TRIGGER tr_check_num; DROP TABLE test_check;
      

  5.   

    创建触发器是比较好的
    创建约束不行的,只能保证插入的数据不小于0,但在小于0时不能更改为0create trigger tri_insert_stock
    before insert on stock
    for each row
    when (new.stock_way<0)
    begin
    :new.stock_way:=0;
    end tri_insert_stock;
      

  6.   


    dex@ORCL> create table t (n number) ;Table created.dex@ORCL> alter table t add constraint ck_t_n check (n>=0) deferrable initially deferred ;Table altered.dex@ORCL> create or replace trigger tg_t_nozero
      2  before insert on t
      3  for each row
      4  begin
      5    if :new.n<0 then
      6      :new.n := 0;
      7    end if ;
      8  end ;
      9  /
    Trigger created.dex@ORCL> insert into t values (-2) ;1 row created.dex@ORCL> commit ;Commit complete.dex@ORCL> select * from t ;         N
    ----------
             0
      

  7.   

    如果当前表数据量比较小的话可以考虑触发器,如果数据量大,触发器是相当影响效率的,你可以在插入时候用一下判断
    insert into A values(decode(sign(salary - 0),1,salary,-1,0,0))
    差不多就这个意思,自己动手试一下