MySql案例里面有一个函数

时间:2013-06-23 16:09:35

标签: mysql sql

我正在尝试实现类似下面的东西,但我会出错 - 用逻辑,语法和其他所有东西。你能帮我吗?

我正在根据某些条件尝试SET STATIC =。如果是PHP,我会使用Break。我来到这里,但没有任何作用。你能看到怎么做吗?

CREATE DEFINER=`root`@`localhost` FUNCTION `caseTest`(`n` INT)
    RETURNS varchar(512)
    LANGUAGE SQL
    DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN

  DECLARE x VARCHAR(1500); 
  DECLARE y VARCHAR(1500); 
  DECLARE static VARCHAR(1500); 

  CASE n
        WHEN '14' THEN SET x = 'Place Order Link';
        WHEN '01' THEN SET x = 'Cancel Order Link';
        WHEN '11' THEN SET x = 'Order Cancelled - Place order link';
        SET static = concat(<a href="">,x,</a>);

        WHEN '00' THEN SET x = 'Order - Under Process'; #No link here
        WHEN '10' THEN SET x = 'Cancel - Under Process'; #No link here
        SET static = x;

        ELSE SET static = 'Error generating link';
    END;

 set y = 'Flag Link ~ Edit Link ~ Move Link';

  RETURN concat(x,y);
END

1 个答案:

答案 0 :(得分:3)

您想将set移到case声明之外:

  set x = case n 
        WHEN '14' THEN 'Place Order Link';
        WHEN '01' THEN 'Cancel Order Link';
        WHEN '11' THEN 'Order Cancelled - Place order link';
        WHEN '00' THEN 'Order - Under Process'; #No link here
        WHEN '10' THEN 'Cancel - Under Process'; #No link here
      end;
  set static = (case when n in ('14', '01', '11') then concat(<a href="">,x,</a>)
                     when n in ('00', '10') then x
                     ELSE 'Error generating link'
                end);

您也可以使用if执行此操作。带有set的{​​{1}}似乎更接近您原来的逻辑。

我认为没有理由说上面的内容不起作用(除了可能的语法错误)。您可以尝试case版本:

if