存储过程中的case语句问题

时间:2017-12-20 10:16:43

标签: mysql sql phpmyadmin mysql-workbench

我正在编写并更新到我想要导入的数据库,但我不知道我的代码有什么问题。 MySQL Workbench和phpMyAdmin返回一个语法错误。这只是一个案例陈述的例子。谁能帮我?

SET @company_code = 0;
SELECT @company_code := LOWER(`value`) FROM `settings` WHERE `setting_name` = 'COMPANY_CODE';
CREATE PROCEDURE p(in  code varchar(200))
BEGIN 
CASE code  
    WHEN 'first_company' THEN SELECT code;
    ELSE SELECT '1';
END CASE
END;

CALL p(@company_code);

我可以在不创建程序的情况下这样做吗?

2 个答案:

答案 0 :(得分:1)

  1. 您在END
  2. 之后缺少分号
  3. 您需要使用;以外的分隔符来创建过程
  4. 请参阅Defining Stored Programs了解相关信息。

    DELIMITER foo
    
    CREATE PROCEDURE p(IN code VARCHAR(200))
    BEGIN
      CASE code
        WHEN 'first_company' THEN INSERT INTO dest_first SELECT code, * FROM srctable;
        ELSE                      INSERT INTO dest_other SELECT '1',  * FROM srctable;
      END CASE;
    END;
    foo
    
    DELIMITER ;
    
    SET @company_code = 0;
    SELECT @company_code := LOWER(value) FROM settings WHERE setting_name = 'COMPANY_CODE';
    CALL p(@company_code);
    

答案 1 :(得分:0)

根据我们上面的讨论,如果"设置" table具有company_code =" first_company"那么你想插入记录然后它可以通过这种方式实现

INSERT INTO colourmst (CODE, Column1) 
SELECT LOWER(`value`) , 'XYZ'
FROM `settings` WHERE `setting_name` = 'COMPANY_CODE'