从sysdate检查1个月的pl / sql过程

时间:2019-07-17 14:35:10

标签: oracle plsql

我需要一个程序来检查date_of_sell从sysdate起超过30天,然后in_stock将更改为“无库存”,而online_stock将更改为“ 1”

create table items (
    item_no number not null,
    item_name varchar2(30) not null,
    description_item varchar2(100) null,
    date_of_sell date,
    in_stock varchar2(20) not null,
    online_stock number(1) default 0 not null,
    check (in_stock in ('In stock', 'not in stock', 'closed'));
create or replace procedure update_stock (item_no in number)


    as
    begin
update items 
    set in_stock = 'not in stock',  online_stock = 1    
    where date_of_sell <= DATEADD(day, -30, GETDATE());
end update_stock;
/

2 个答案:

答案 0 :(得分:1)

Oracle中没有像DATEADD这样的函数。您可以简单地向date添加一个正整数或负整数来增加或减少天数。使用SYSDATE代替getdate()。您可以对TRUNC进行SYSDATE来忽略时间分量。

此外,对于参数,请不要按原样使用列名称。您可以使用类似p_item_no的名称。您是否打算在where子句的过程中使用它?我看不到它正在被使用。

CREATE OR REPLACE PROCEDURE update_stock (
     p_item_no IN NUMBER
) AS
BEGIN
  UPDATE items 
      SET in_stock      = 'not in stock', 
         online_stock = 1    
      WHERE                             --p_item_no = ?
        date_of_sell <= SYSDATE - 30;   --TRUNC(SYSDATE) if you want to ignore time.
END update_stock;
/

答案 1 :(得分:0)

在上一个答案的基础上添加一些值,如果您确实希望在某个日期之前1个月(而不是30天),则可以使用ADD_MONTHS函数:

CREATE OR REPLACE PROCEDURE update_stock (
     p_item_no IN NUMBER
) AS
BEGIN
  UPDATE items 
      SET in_stock      = 'not in stock', 
         online_stock = 1    
      WHERE                                         --p_item_no = ?
        date_of_sell <= ADD_MONTHS(SYSDATE, - 1);   --TRUNC(SYSDATE) if you want to ignore time.
END update_stock;
/

干杯!