如何在mysql中调用事件中的存储过程

时间:2015-10-10 16:29:04

标签: mysql stored-procedures eventtrigger mysql-event

我创建了一个存储过程并尝试在事件中调用它,因为我想每1分钟执行一次存储过程。 但是我找不到任何结果。

这是我写的存储过程insert_update_supplier

    DELIMITER $$

    USE `eegpap`$$

    DROP PROCEDURE IF EXISTS `insert_update_supplier`$$

     CREATE DEFINER=`eegpap`@`%` PROCEDURE `insert_update_supplier`()
     BEGIN

     SELECT COUNT(*) AS col_no1, Invoice_Date AS invoicedate, No_of_Cases AS d_ncases, No_of_Bottles AS d_nbottles, Product_Code AS d_pcode  FROM depot_sales__c WHERE Supplier_Code IN (SELECT Supplier FROM advance_payment_request__c);
     SELECT From_Date AS s_fromdate FROM supplier_payment__c;

     IF col_no1>0 THEN
       IF(CURDATE()-invoicedate>=45) THEN
         IF(s_fromdate>invoicedate) THEN 
            UPDATE supplier_payment__c SET From_Date=invoicedate;
         END IF;
         IF(d_nbottles!=NULL AND d_nbottles>0) THEN 
            UPDATE supplier_payment__c SET No_of_Loose_Cases=(No_of_Loose_Cases+1) AND No_of_Loose_Bottles=(No_of_Loose_Bottles+d_nbottles);
         END IF;
         UPDATE supplier_payment__c SET No_of_Loose_Cases=(No_of_Loose_Cases+1) AND No_of_Cases=(No_of_Cases+d_ncases) AND Cost_Value=(d_ncases*(SELECT Landed_Cost FROM product2 WHERE Supplier_Code=d_pcode));
        END IF;
      END IF;
   END$$

  DELIMITER ;

这是事件supplier_event

   CREATE EVENT supplier_event
ON SCHEDULE EVERY 5 SECOND
DO
  CALL insert_update_supplier();

我不明白我犯错误的地方或问题所在。或者如果除了存储过程之外还有其他替代方法,请建议。

请帮帮我一下。提前致谢

1 个答案:

答案 0 :(得分:0)

本声明:

    SELECT COUNT(*) AS col_no1, Invoice_Date AS invoicedate, No_of_Cases AS d_ncases, No_of_Bottles AS d_nbottles, Product_Code AS d_pcode
    FROM depot_sales__c
    WHERE Supplier_Code IN (SELECT Supplier FROM advance_payment_request__c);

没有做你期望的事。我想你想要的东西:

    SELECT col_no1 := COUNT(*),
           invoicedate := Invoice_Date,
           d_ncases := No_of_Case,
           d_nbottles := No_of_Bottles,
           d_pcode := Product_Code
    FROM depot_sales__c
    WHERE Supplier_Code IN (SELECT Supplier FROM advance_payment_request__c);

您还应该在代码块中声明您正在使用的变量。