我正在尝试实现类似下面的东西,但我会出错 - 用逻辑,语法和其他所有东西。你能帮我吗?
我正在根据某些条件尝试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
答案 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