使用最大功能更新

时间:2016-12-14 06:19:45

标签: oracle max

我现在正在使用表中的3列。第一个是最大数量可以使用,第二个是使用量。现在,我希望第3列是最大值(1st-2nd,0)。

我正在使用update my_table set availability = max(1st-2nd,0) where type = 'bill';

但在程序中,这是不可能的。主要的是我不想要负值而我想要0而不是它。我怎么能这样做。

2 个答案:

答案 0 :(得分:1)

使用GREATEST功能:

# Lay out each panel using grid.arrange from gridExtra package
grid.arrange(grobs=pl, ncol=2, widths=c(10,9))

答案 1 :(得分:0)

这是一种非规范化,这不是一种好的做法。每次我们都要更新其他两列中的任何一列时,我们必须维护availability 。这可能比仅在我们需要时计算可用资金更昂贵。

更好的方法是使用检查约束来隐含业务规则。考虑这个版本的表:

create table my_table (
    id varchar2(10) not null primary key
    , max_amount number not null
    , used_amount number default 0 not null
    , constraint check_available_amount 
        check (max_amount - used_amount >= 0)
);

现在我们更新Bill的账号(我知道这不是你的测试数据所代表的,但无论如何......)

SQL> insert into my_table values ('bill', 100, 0);

1 row created.

SQL> update my_table
  2  set used_amount = 75
  3  where id = 'bill'
  4  /

1 row updated.

SQL> update my_table
  2  set used_amount =  used_amount + 30
  3  where id = 'bill'
  4  /
update my_table
*
ERROR at line 1:
ORA-02290: check constraint (APC.CHECK_AVAILABLE_AMOUNT) violated


SQL>