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