|  | 
Задавайте вопросы, мы ответим
Вы не зашли.
есть ли в SQL что либо подобное?
просто в конструкции:
CASE expression
        WHEN value THEN
            statements
        [WHEN value THEN
            statements ...]
        [ELSE 
            statements]
    END CASE;
нужно обязательно поставить после ELSE какой то оператор, иначе если ни в один WHEN не сработает будет exeption.
можно ли придумать что-нибудь получше чем 'SELECT 0;' ?
Неактивен

Вообще говоря, ELSE можно не писать... но уж если написан, то,
конечно, оператор нужно. NOOP нету.
Неактивен
paulus написал:
Вообще говоря, ELSE можно не писать...
я же написал почему нужен этот ELSE:   если ни один WHEN не сработает будет exeption (это без ELSE)
а мне exeption совсем ни к чему.
Неактивен

Небольшое дополнение: если не использовать ELSE, и при этом не будет выполнено ни одно из условий WHEN value, то выражение просто вернет NULL (и потом с ним можно работать, например, при помощи функции ISNULL() и других)
Это можно проиллюстрировать примером:
mysql>SET @a = 0;
Query OK, 0 rows affected (0.00 sec)
mysql>SET @b = CASE @a
-> WHEN 0 THEN '@a is 0'
-> END;
Query OK, 0 rows affected (0.00 sec)
mysql>SET @a = 1;
Query OK, 0 rows affected (0.00 sec)
mysql>SET @c = CASE @a
-> WHEN 0 THEN '@a is 0'
-> END;
Query OK, 0 rows affected (0.01 sec)
mysql>SELECT
-> @b AS 'When @a is 0, statement returns',
-> @c AS 'When @a = 1, statement returns'
-> ;
+---------------------------------------+---------------------------------------+
| When @a is 0, statement returns | When @a = 1, statement returns |
+---------------------------------------+---------------------------------------+
| @a is 0 | NULL |
+---------------------------------------+---------------------------------------+
1 row in set (0.00 sec)
Результаты выражений можно селектить непосредственно (т.е. прямо писать 
SELECT  CASE @var_name … )
Если Вам такое решение не подходит, или ответ не совсем на ваш вопрос - опишите вашу задачу подробнее.
Отредактированно LazY (21.04.2007 01:55:05)
Неактивен

Думаю, автор имел в виду следующую ситуацию:
DELIMITER //
CREATE PROCEDURE A(num int)
  BEGIN CASE num
    WHEN 1 THEN SELECT 'xxx';
    WHEN 2 THEN SELECT 'yyy';
  END CASE;
END//
mysql> CALL A(1)//
+-----+
| xxx |
+-----+
| xxx |
+-----+
1 row in set (0.00 sec)
mysql> CALL A(4)//
ERROR 1339 (20000): Case not found for CASE statementДействиительно возникает ошибка, а чтобы ее исправить, единственным решением кажется что-то вроде:
ELSE SELECT NULL;
Неактивен

Хм... значит, я не правильно понял вопрос. В таком случае отлично работает
CASE a
WHEN 1 THEN SELECT 'one';
WHEN 2 THEN SELECT 'two';
ELSE BEGIN END;
END CASE;
Следует учесть, что в случае не 1 и не 2 процедура выдаст на 1 SELECT меньше - 
с этим надо считаться. Проще, конечно, вариант с SELECT NULL.
Неактивен
спасибо за то что вы меня поняли 
Неактивен