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

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

高分求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))
差不多就这个意思,自己动手试一下