1

超市有很多产品。当其中一种产品的数量为零时,需要向经理发送一封自动电子邮件,表明该产品缺货。

我已经完成了电子邮件部分(通过 SQL Developer 发送电子邮件)。现在我需要设置一个循环来跟踪产品的数量。这个循环怎么叫?.

装甲运兵车?我试过了。但它不适合我

create or replace
procedure check_stock_qty
begin      
for r in ( select product_name,product_id from super_market 
where pro_qty = 0 )  
loop       
UTL_MAIL.send(sender => 'blabla@me.com',
        recipients => 'blabla@me.com',
         subject => 'Test Mail',
         message => ( r.product_name ),
      mime_type => 'text; charset=us-ascii');  

end loop; 
end;
------------------------
BEGIN    

dbms_scheduler.create_job (job_name => 'stock check',
job_type        => 'PLSQL_BLOCK',        
job_action      => 'BEGIN check_stock_qty; END;',    
start_date      => SYSTIMESTAMP,       
repeat_interval => 'freq=minutely; interval=5; bysecond=0;',    
end_date        => NULL,         
enabled    => TRUE,
END;

该程序已编译,但win运行它。它给出错误“所选程序处于无效运行状态。重新编译程序并重试”

4

1 回答 1

2

最好的方法是使用数据库作业定期检查 PRODUCTS 表。

首先你需要一个存储过程。像这样的东西:

create or replace procedure check_stock_qty
begin
     for r in ( select product_name from products
                where qty = 0 )
     loop
         your_email_proc_here ( r.product_name );
     end loop;
end;

然后,您可以将其设置为定期运行。当您使用 Oracle 11g 时,您应该使用 DBMS_SCHEDULER API 来执行此操作。此调用将每五分钟运行一次上述库存检查器:

BEGIN
    dbms_scheduler.create_job (
        job_name        => 'stock check',
        job_type        => 'PLSQL_BLOCK',
        job_action      => 'BEGIN check_stock_qty; END;',
        start_date      => SYSTIMESTAMP,
        repeat_interval => 'freq=minutely; interval=5; bysecond=0;',
        end_date        => NULL,
        enabled         => TRUE,
END;
/

DBMS_SCHEDULER 相当复杂,即复杂但有据可查。 了解更多。

于 2012-05-21T14:10:40.580 回答