alter table sc_tt_stock add Constraint stock_way_value check(stock_way >=0);晕,CSDN竟然还抵不过百度知道百度知道没给分,都有很多人回答。。 现在在CSDN高分提的3个问题,都没人回答了。。
alter table sc_tt_stock add Constraint stock_way_value check(stock_way >=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时不能更改为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;
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)) 差不多就这个意思,自己动手试一下
STOCK_WAY NUMBER(11,3)
alter table sc_tt_stock
add Constraint stock_way_value check(stock_way >=0);晕,CSDN竟然还抵不过百度知道百度知道没给分,都有很多人回答。。
现在在CSDN高分提的3个问题,都没人回答了。。
alter table sc_tt_stock
add Constraint stock_way_value check(stock_way >=0);
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时不能更改为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;
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))
差不多就这个意思,自己动手试一下