LINUX.ORG.RU
ФорумAdmin

Функция MySQL


0

1

CREATE DEFINER = 'ascone'@'%' FUNCTION `TR_SEL_FUNC`(CC VARCHAR(6))
RETURNS varchar(30)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT 'func'
BEGIN
DECLARE CC_TEMP CHAR(20);
DECLARE PHONE_TEMP CHAR(10);
DECLARE CC_STR VARCHAR(6);

SET CC_STR = CC;

IF (LENGTH(CC)=6) THEN
SELECT trunk, phone FROM ts_route WHERE mask=CC_STR AND phone!='local' INTO CC_TEMP, PHONE_TEMP;

IF (CC_TEMP IS NULL) THEN
SET CC_STR = LEFT(CC_STR,5);
SELECT trunk, phone FROM ts_route WHERE mask=CC_STR AND phone!='local' INTO CC_TEMP, PHONE_TEMP;

IF (CC_TEMP IS NULL) THEN
SET CC_STR = LEFT(CC_STR,4);
SELECT trunk, phone FROM ts_route WHERE mask=CC_STR AND phone!='local' INTO CC_TEMP, PHONE_TEMP;

IF (CC_TEMP IS NULL) THEN
SET CC_STR = LEFT(CC_STR,3);
SELECT trunk, phone FROM ts_route WHERE mask=CC_STR AND phone!='local' INTO CC_TEMP, PHONE_TEMP;

IF (CC_TEMP IS NULL) THEN
SET CC_STR = LEFT(CC_STR,2);
SELECT trunk, phone FROM ts_route WHERE mask=CC_STR AND phone!='local' INTO CC_TEMP, PHONE_TEMP;

END IF;
END IF;
END IF;
END IF;
END IF;


RETURN {CC_TEMP PHONE_TEMP};

END;
//

Как в функции вернуть два значения? Одно - возвращает (CC_TEMP), но нужно - два (CC_TEMP, PHONE_TEMP ) ...

в функции:
RETURN CONCAT( CC_TEMP, ",", PHONE_TEMP );

После вызова функции:
CC_TEMP = SUBSTRING_INDEX( function_result, ",", 1 );
PHONE_TEMP = SUBSTRING_INDEX( function_result, ",", -1 );
anonymous ()
Ответ на: комментарий от anonymous

Спасибо!
Не понял только насчет: - «После вызова функции».

Где и когда это нужно делать? Планируется вызвать так:

mysql base -u xxx -p -e 'SELECT TR_SEL_FUNC(852252)'

anonymus123 ()
Ответ на: комментарий от anonymus123

Попробуй так:

SELECT SUBSTRING_INDEX(col,",",1),SUBSTRING_INDEX(col,",",-1) FROM (SELECT TR_SEL_FUNC(852252) AS col) AS t
Pinkbyte ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.