Определите IF-THEN операторы внутри меток - PullRequest
0 голосов
/ 31 марта 2020

После этого вопроса , учтите, что вы хотите сделать несколько вещей, если выполняется условие. псевдокод:

if condition then
    do things
else if other conditions then
    do other things
else
    other things
end if

С этой страницы можно определить оператор if в фиктивной процедуре:

DROP PROCEDURE IF EXISTS <procedure_name>();
DELIMITER $$

CREATE PROCEDURE <procedure_name>()
BEGIN
    IF (<conditions>) THEN
        -- do things
    ELSEIF (<conditions>) THEN
        -- do other things
    ELSE 
        -- other things
    END IF;
END$$

DELIMITER ;

<procedure_name>();

, что, честно говоря, является самым уродливым способом реализации if утверждение, которое я когда-либо видел на любом языке программирования, когда-либо!

На этой странице предлагается некоторый однострочный синтаксис оператора в виде

SELECT IF(<condition>, 'true message', 'false message');

для распечатки сообщения или вложенные

SELECT <fields>
IF (<condition>)
AS <custom_label>
FROM <table>

для выбора только тех строк из таблицы, которые удовлетворяют заданному c условию указанного c поля / столбца.

Теперь мне было интересно, если это Можно ли реализовать заявления более каноническим способом. Например, используя метки для содержания операторов IF-THEN:

<label>: IF (<conditions>) THEN
    -- do things
ELSEIF (<conditions>) THEN
    -- do other things
ELSE 
    -- other things
END IF <label>;

или

<label>: BEGIN
IF (<conditions>) THEN
    -- do things
ELSEIF (<conditions>) THEN
    -- do other things
ELSE 
    -- other things
END IF;
END <label>;

, которые немного менее безобразны. Цель состоит в том, чтобы найти более разумный и краткий способ определения утверждений, поэтому другие решения также приветствуются. Спасибо за вашу поддержку заранее.

...