функция mysql if / else - PullRequest
       24

функция mysql if / else

1 голос
/ 13 октября 2009

У меня есть функция, которая возвращает строку даты. Мне это нужно, потому что я не могу использовать переменную в представлении, но я могу использовать функцию, которая возвращает переменную, которую я установил заранее ...

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

DELIMITER $$

USE `cc`$$

DROP FUNCTION IF EXISTS `ox_date`$$

CREATE  FUNCTION `ox_date`() RETURNS CHAR(50) CHARSET latin1
DECLARE ox VARCHAR(20)
IF @oxdate <1 THEN SET ox = CURDATE$$
ELSE SET ox = @oxdate$$

RETURN ox $$

DELIMITER ;

Сначала я попробовал isnull, но это не помогло.

Ответы [ 2 ]

1 голос
/ 13 октября 2009

Я не эксперт, но вот несколько вещей, которые я вижу.

Во-первых, у вас есть

DELIMITER $$

, а затем используйте его в самой функции. Эта строка DELIMITER позволяет вам использовать точки с запятой в теле функции. В противном случае ';' завершит оператор CREATE FUNCTION преждевременно.

Также линия

DECLARE ox varchar(20)

в конце отсутствует точка с запятой.

И тогда вам не хватает

END IF; 

после условия else.

А как насчет BEGIN END $$, обернутого вокруг определения функции?

Я ожидаю, что хранимая функция, как правило, примет вид:

DELIMITER $$
DROP FUNCTION IF EXISTS `testdb`.MyFunc$$
CREATE FUNCTION `testdb`.`MyFunc` () RETURNS INT
BEGIN
   DECLARE someVar varchar(20);
   # some stuff
   RETURN something;
END $$

DELIMITER ;

Изменение функций кишечника в соответствии с вашими потребностями и установка типа возврата соответствующим образом.

В любом случае, я не эксперт, но это то, что я вижу, и надеюсь, что это поможет.

0 голосов
/ 14 октября 2009

Зачем вам возиться с разделителем? Для простой логики предпочтите функцию IF оператору IF.

CREATE FUNCTION `ox_date`( )
RETURNS CHAR(50) CHARSET latin1
RETURN IF(@oxdate < 1 OR @oxdate IS NULL, CURDATE(),@oxdate)

прочее

DELIMITER $$

USE `cc`$$

DROP FUNCTION IF EXISTS `ox_date`$$

CREATE FUNCTION `ox_date`( )
RETURNS CHAR(50) CHARSET latin1
RETURN IF(@oxdate < 1 OR @oxdate IS NULL, CURDATE(),@oxdate)$$

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