DBMS_shceduler作业在创建时执行select语句

时间:2016-03-04 23:16:27

标签: sql database oracle dbms-scheduler

我正在尝试在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;

0 个答案:

没有答案