Как вы справляетесь с тем, что параметры по умолчанию невозможны для Mysql SP? - PullRequest
2 голосов
/ 12 июня 2009

Есть идеи? Я задал вопрос «Возможно ли иметь параметр по умолчанию для хранимой процедуры mysql?» сегодня, и ответ был очень сильным «нет, это невозможно».

Итак, мой следующий вопрос: как вы, как разработчик php / mysql, решаете эту проблему? Вы передаете нуль, и в SP есть блок IF, который устанавливает переменную, если ее ноль? Вы передаете значение по умолчанию в PHP?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 12 июня 2009

Вот одно решение, использующее COALESCE() для установки значения локальной переменной в хранимой процедуре:

DELIMITER !!

CREATE PROCEDURE dflt (IN param1 INT)
BEGIN
 DECLARE param1_dflt INT DEFAULT 456
 SET param1_dflt = COALESCE(param1, param1_dflt);

 SELECT param1_dflt;
END!!

DELIMITER ;

CALL dflt(123);
+-------------+
| param1_dflt |
+-------------+
|         123 | 
+-------------+


CALL dflt(NULL);
+-------------+
| param1_dflt |
+-------------+
|         456 | 
+-------------+
1 голос
/ 12 июня 2009

Дополнительные параметры запланированы для MySQL 6.

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

Я бы рассмотрел ваши аргументы в пользу использования хранимых процедур. В подавляющем большинстве случаев они приносят мало пользы, поскольку абстрагирование может выполняться на уровне приложений, а уменьшение сетевого трафика обычно представляет собой наименьшую проблему. Конечно, это зависит от вашего приложения.

0 голосов
/ 12 июня 2009

Это должно обрабатываться базой данных, а не вызывающим скриптом. Если вы не можете определить параметры по умолчанию, тогда передайте NULL значения и дайте хранимой процедуре выполнить значения по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...