【问题标题】:error when creating procedure in Mysql, how to fix it?在Mysql中创建程序时出错,如何解决?
【发布时间】:2019-09-09 03:02:00
【问题描述】:

我正在尝试在 Mysql 中创建一个过程,但在第 12 行出现错误。

它说:

数据库更改查询正常,0 行受影响,1 个警告(0.00 秒)

ERROR 1064 (42000):您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 'declare required_date date default 附近使用的语法 cast('0001-01-01' 作为日期); 在第 12 行声明 错误 1305 (42000):PROCEDURE classicmodels.getInfo 不存在 +---------+ | @结果 | +---------+ |空 | +---------+ 1 行(0.00 秒)

我的代码:

use classicmodels;

delimiter $$
drop procedure if exists `getInfo` $$
create procedure getInfo(in customer_number int(11), in order_number int(11))
begin

    if order_number = 0 and customer_number != 0 THEN
        select orders.orderDate, orders.requiredDate, orders.shippedDate from orders
            inner join customers on customers.customerNumber = orders.customerNumber
            where customers.customerNumber = customer_number;
    elseif order_number != 0 and customer_number = 0 THEN
        select orders.orderDate, orders.requiredDate, orders.shippedDate from orders
            where orders.orderNumber = order_number;
    ELSEIF order_number != 0 and customer_number != 0 THEN
        declare required_date date default cast('0001-01-01' as date);
        declare shipped_date date default cast('9999-01-01' as date);

        select requiredDate into required_date, shippedDate into shippedDate from orders
            inner join customers on customers.customerNumber = orders.customerNumber
            where customers.customerNumber = customer_number and orders.orderNumber = order_number;

        if required_date = shipped_date then 
            select "dap ung tot";
        else
            select "dap ung khong tot";
        end if;
    end if;

end $$
delimiter ;

call getInfo(353,10121);

select @result;


-- C:\Program Files\MySQL\MySQL Server 8.0\bin

【问题讨论】:

  • 从非工作代码逆向工程你的意图是棘手的。

标签: mysql sql


【解决方案1】:

我在这里发现了 2 个问题。

  1. 您不能在条件语句中声明变量。
  2. 由于您的变量是标量,请将结果限制为 1。
  3. 你不需要这些变量,你可以用select case代替它,这样你就可以获得多行

这是你的完整脚本。

use classicmodels;

delimiter $$
drop procedure if exists `getInfo` $$
create procedure getInfo(in customer_number int(11), in order_number int(11))
begin


    if order_number = 0 and customer_number != 0 THEN
        select orders.orderDate, orders.requiredDate, orders.shippedDate from orders
            inner join customers on customers.customerNumber = orders.customerNumber
            where customers.customerNumber = customer_number;
    elseif order_number != 0 and customer_number = 0 THEN
        select orders.orderDate, orders.requiredDate, orders.shippedDate from orders
            where orders.orderNumber = order_number;
    elseif order_number != 0 and customer_number != 0 THEN

        select case when required_date = shippedDate then 'dap ung tot' else 'dap ung khong tot' end from orders
            inner join customers on customers.customerNumber = orders.customerNumber
            where customers.customerNumber = customer_number and orders.orderNumber = order_number

    end if;

end $$
delimiter ;

call getInfo(353,10121);

select @result;

【讨论】:

  • 为什么它不起作用:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'into shipped_date from orders inner join customers on customers.cust' at line 16 ERROR 1305 (42000): PROCEDURE classicmodels.getInfo does not exist
  • 我删除了你的变量,你不需要它。您可以使用选择案例
猜你喜欢
  • 1970-01-01
  • 2019-10-06
  • 2020-12-20
  • 2014-12-15
  • 1970-01-01
  • 2021-10-03
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多