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

В базе использую следующею функцию
Код: 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
Помогите найти ошибку в функции MySql
    #39192475
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что должна делать эта функция?
...
Рейтинг: 0 / 0
Помогите найти ошибку в функции MySql
    #39192490
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pr0n1xесли в функцию передать несуществующий ID то получается
... что первый же запрос к таблице не возвращает записей. А проверять это никто и не думает...
...
Рейтинг: 0 / 0
Помогите найти ошибку в функции MySql
    #39192570
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как правило не делаются функции для конкретного селекта-таблицы. Делается фун-я для использования в общих случаях
...
Рейтинг: 0 / 0
Помогите найти ошибку в функции MySql
    #39194323
pr0n1x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добавил проверку в функцию, но все происходит зацикливание

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

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

а так можно?
...
Рейтинг: 0 / 0
Помогите найти ошибку в функции MySql
    #39195010
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор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
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите найти ошибку в функции MySql
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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