我需要一个程序来检查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;
/
答案 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;
/
干杯!