首页 > 解决方案 > MySQL:创建存储过程并立即调用它

问题描述

我需要创建一个存储过程,然后立即在同一个 .sql 文件中调用它。该程序很简单,只计算收入和支出之间的差额。问题是,当我调用该程序时,我收到此错误消息

程序如下:

DELIMITER $$            
    CREATE PROCEDURE crs.CurrentFinanceReport()
    BEGIN   
        DECLARE  income DECIMAL(6,2) default 0; 
        DECLARE  outgoings DECIMAL(6,2) default 0; 
        SET income = (SELECT SUM(invoice.TotalPrice) FROM crs.invoice INNER JOIN crs.orders ON orders.CustomerEmail = invoice.CustomerEmail WHERE orders.OrderStatus != "Recieved");
        SET outgoings =(SELECT SUM(OrderCost) FROM crs.stockOrder WHERE DateTimeRecieved = 0);
        SELECT (income - outgoings);
    END $$
    DELIMITER ;

我用这个来称呼它:

CALL crs.CurrentFinanceReport();

如果它有帮助,我发现如果过程是空的(BEGIN 和 END 之间没有任何内容)它可以调用它而不会出错,但是只要我添加一个简单的 SELECT * 它就会导致错误。

标签: mysqlphpmyadmin

解决方案


SET FORIEGN_KEY_CHECKS=ON是 phpmyadmin 生成的查询,而不是您的代码。使用 mysql 客户端,您可能不会遇到此错误(或由于 phpmyadmin “聪明”而导致的任何其他错误)。


推荐阅读