我正在尝试在oracle sql中设置一个拍卖行进行练习。 我想为每个项目创建DBMS作业,因为当sysdate等于拍卖结束时,它会触发并销售该项目。
我有这个程序'出售',出售新物品。最后我有这个:(标识是项目的ID) Itt称之为将钱存入正确账户的功能。
CREATE PROCEDURE sell()
...
begin
dbms_scheduler.create_job
(
job_name => 'Item_Job'||to_char(ident),
job_type => 'PLSQL_BLOCK',
job_action => 'pay_the_seller('||to_char(ident)||');',
start_date => pEnd_date,
enabled => TRUE,
auto_drop => TRUE,
end;
END;
问题在于它似乎执行'pay_the_seller'过程。在创建作业时不在start_date。
例如,如果项目的起始出价为1,则当作业触发时,即使我在此期间更改了出价,也会添加1该帐户。
编辑: 在'pay_the_seller()'过程中,SELECT语句在创建作业时执行,但UPDATE不是。
如何让SELECT不立即执行?
CREATE OR REPLACE PROCEDURE pay_the_seller(
pItem_id auctions.item_id%TYPE)
AS
seller_name accounts.username%TYPE;
price auctions.price1%TYPE;
buyer_name accounts.username%TYPE;
BEGIN
SELECT seller INTO seller_name FROM auctions WHERE item_id = pItem_id;
SELECT price1 INTO price FROM AUCTIONS WHERE item_id = pItem_id;
SELECT buyer INTO buyer_name FROM auctions WHERE item_id = pItem_id;
UPDATE accounts SET balance = balance + price WHERE username = seller_name;
END pay_the_seller;