代码之家  ›  专栏  ›  技术社区  ›  MTK

无法创建存储过程mysql maybe-if-else语法

  •  0
  • MTK  · 技术社区  · 9 年前

    我尝试编写这样的存储过程,但它不起作用:

    DROP PROCEDURE IF EXISTS `my_test`;
    CREATE PROCEDURE `my_test`(
      IN my_in_var VARCHAR(255),
      OUT my_out_var VARCHAR(255)
    )
    BEGIN
      IF(in_var == 'my_in_value') THEN
        SET my_out_var = 'my_out_value1';
      ELSE
        SET my_out_var = 'my_out_value2';
      END IF;
    END
    

    我尝试使用PDO从php执行

    $conn = new PDO("mysql:host=".$mysql_host.";dbname=".$mysql_bd, $mysql_user, $mysql_password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $conn->exec($sql);
    

    没有错误,但我在MySql服务器上看不到

    SHOW CREATE PROCEDURE my_test
    

    因此,我尝试在phpmyadmin的SQL窗口中复制粘贴它,但得到以下语法错误:

    1064-您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解在“==”my_in_value“附近使用的正确语法)然后 在第6行设置my_out_var=“my_out值1”

    欢迎任何帮助-谢谢

    1 回复  |  直到 9 年前
        1
  •  1
  •   Drew    9 年前

    注意,已经向我指出以下内容 DELIMITER 在我不使用的PHPMyAdmin中不需要。所以 DELIMITER公司 是客户端的事情,比如MySQL Workbench之类的软件所需要的。

    存储过程:

    DROP PROCEDURE IF EXISTS `my_test`;
    DELIMITER $$
    CREATE PROCEDURE `my_test`(
      IN my_in_var VARCHAR(255),
      OUT my_out_var VARCHAR(255)
    )
    BEGIN
      IF (my_in_var = 'my_in_value') THEN
        SET my_out_var = 'my_out_value1';
      ELSE
        SET my_out_var = 'my_out_value2';
      END IF;
    END$$
    DELIMITER ;
    

    测试:

    set @outme='';
    call my_test('lizard',@outme);
    select @outme;
    -- my_out_value2
    
    set @outme='';
    call my_test('my_in_value',@outme);
    select @outme;
    -- my_out_value1
    

    所以你需要弄清楚你的意图是什么。

    您的double有语法错误 = 你可能在 in_var 那是不存在的。

    PHPMyAdmin(不需要DELIMITER,所以我被告知):

    DROP PROCEDURE IF EXISTS `my_test`;
    CREATE PROCEDURE `my_test`(
      IN my_in_var VARCHAR(255),
      OUT my_out_var VARCHAR(255)
    )
    BEGIN
      IF (my_in_var = 'my_in_value') THEN
        SET my_out_var = 'my_out_value1';
      ELSE
        SET my_out_var = 'my_out_value2';
      END IF;
    END
    
    推荐文章