【问题标题】:Bad Create PROCEDURE in mysql在 mysql 中创建错误的程序
【发布时间】:2014-10-06 23:52:17
【问题描述】:

我正在尝试在 mysql 中执行查询。所以,当我跑步时,我会收到:

Error Code: 1304. PROCEDURE ander already exists

我尝试用 @ 定义变量“a”,但结果相同 - 错误代码:1304。 实际上当我执行 SELECT 语句时是正确的。那么,我的错误可能在哪里?

DELIMITER //
CREATE PROCEDURE ander() 

BEGIN


DECLARE a int ;
SET a=1;


  WHILE a < 20
    DO

    SELECT 
    (SUM(price) + SUM(delivery_price)) as total_sum,
    COUNT(`id`) AS total_cnt,
    market_id,
    `date`,
    COUNT(`user_id`) AS total_users
    FROM orders 
    WHERE 
    (`date`>='2014-08-01 00:00:00' - INTERVAL a DAY) AND ( `date`<='2014-08-01   23:59:59' - INTERVAL a DAY)

    GROUP BY market_id;


    SET a=a+1;


    END WHILE;

END//
DELIMITER ; 

谢谢!

【问题讨论】:

  • 试试CREATE OR REPLACE
  • 这里的错误非常明显:您正在尝试创建一个已经存在的存储过程。这与您的 sproc 的内部结构无关,与它的名称有关。

标签: php mysql procedure


【解决方案1】:

在开头添加:

DROP PROCEDURE ander;

所以你应该有:

DROP PROCEDURE ander;

CREATE PROCEDURE ander() 

BEGIN


DECLARE a int ;
SET a=1;


  WHILE a < 20
    DO

    SELECT 
    (SUM(price) + SUM(delivery_price)) as total_sum,
    COUNT(`id`) AS total_cnt,
    market_id,
    `date`,
    COUNT(`user_id`) AS total_users
    FROM orders 
    WHERE 
    (`date`>='2014-08-01 00:00:00' - INTERVAL a DAY) AND ( `date`<='2014-08-01   23:59:59' - INTERVAL a DAY)

    GROUP BY market_id;


    SET a=a+1;


    END WHILE;

END//
DELIMITER ; 

【讨论】:

    【解决方案2】:

    每个mysql PROCEDURE都存储在数据库中(基本上它是一个数据库对象)

    你需要先使用语法删除

    DROP PROCEDURE ander
    

    文档:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-25
      • 2020-09-15
      • 1970-01-01
      • 2016-06-10
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多