Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите найти ошибку в функции MySql / 8 сообщений из 8, страница 1 из 1
15.03.2016, 15:59
    #39192461
pr0n1x
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку в функции MySql
Здравствуйте.

В базе использую следующею функцию
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
DELIMITER $$
CREATE FUNCTION cat_hierarhy (id int) 
RETURNS text CHARSET utf8
DETERMINISTIC
BEGIN 
    DECLARE cat_id int;
	DECLARE str text CHARSET utf8;
	DECLARE cat text CHARSET utf8;
	DECLARE url text CHARSET utf8;

	WHILE id > 0 DO  
        	SELECT category_id, category_parent_id, category_name, category_url INTO cat_id, id, cat, url FROM tbl_category WHERE category_id = id;  
        	SET str = CONCAT_WS(';', str, cat, url, cat_id);
    	END WHILE;
	
	RETURN str;
END$$
DELIMITER ;

Вызываю функцию так
SELECT cat_hierarhy(100);

функция отрабатывает нормально в том случае если она находит запись с id = 100, но если в функцию передать несуществующий ID то получается или бесконечный цикл или еще что-то, но вся база виснет
...
Рейтинг: 0 / 0
15.03.2016, 16:05
    #39192475
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку в функции MySql
а что должна делать эта функция?
...
Рейтинг: 0 / 0
15.03.2016, 16:12
    #39192490
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку в функции MySql
pr0n1xесли в функцию передать несуществующий ID то получается
... что первый же запрос к таблице не возвращает записей. А проверять это никто и не думает...
...
Рейтинг: 0 / 0
15.03.2016, 17:18
    #39192570
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку в функции MySql
как правило не делаются функции для конкретного селекта-таблицы. Делается фун-я для использования в общих случаях
...
Рейтинг: 0 / 0
17.03.2016, 13:24
    #39194323
pr0n1x
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку в функции MySql
добавил проверку в функцию, но все происходит зацикливание

авторDELIMITER $$
CREATE FUNCTION cat_hierarhy (id int)
RETURNS text CHARSET utf8
DETERMINISTIC
BEGIN
DECLARE cat_id int;
DECLARE str text CHARSET utf8;
DECLARE cat text CHARSET utf8;
DECLARE url text CHARSET utf8;

WHILE id > 0 DO
SELECT category_id, category_parent_id, category_name, category_url INTO cat_id, id, cat, url FROM tbl_category WHERE category_id = id;
IF id = '' THEN SET id = 0;
END IF;
SET str = CONCAT_WS(';', str, cat, url, cat_id);
END WHILE;

RETURN str;
END$$
DELIMITER ;


но если указать существующий ID то функция отрабатывает корректно, в чем здесь ошибка?
...
Рейтинг: 0 / 0
17.03.2016, 13:29
    #39194337
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку в функции MySql
а разве можно внутри функции изменять её аргумент? насколько я помню, такое только процедуры позволяют, и только с INOUT-параметрами.
...
Рейтинг: 0 / 0
17.03.2016, 13:56
    #39194399
pr0n1x
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку в функции MySql
tanglir,

Код: plaintext
IF id = '' THEN RETURN 'error';

а так можно?
...
Рейтинг: 0 / 0
18.03.2016, 06:12
    #39195010
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку в функции MySql
авторThe INTO clause can name a list of one or more variables, which can be user-defined variables, stored procedure or function parameters, or stored program local variables. (Within a prepared SELECT ... INTO OUTFILE statement, only user-defined variables are permitted;see Section 13.6.4.2, “Local Variable Scope and Resolution”.)

The selected values are assigned to the variables. The number of variables must match the number of columns. The query should return a single row. If the query returns no rows, a warning with error code 1329 occurs (No data), and the variable values remain unchanged .
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите найти ошибку в функции MySql / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]