日期:2014-05-17  浏览次数:20745 次

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

------解决方案--------------------
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;
------解决方案--------------------
创建触发器是比较好的
创建约束不行的,只能保证插入的数据不小于0,但在小于0时不能更改为0

create 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;

------解决方案--------------------
SQL code

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

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