powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос с хранимой функцией выдает 0 записей
8 сообщений из 8, страница 1 из 1
Запрос с хранимой функцией выдает 0 записей
    #40094728
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос, где стоит
Код: sql
1.
WHERE mns.filter IN ('all','women')


выдает набор записей.

Есть хранимая функция
Код: sql
1.
SELECT get_med_exam_filter_str(148)


которая выдает строку автор'all','women'
Но если в первом запросе заменяешь WHERE mns.filter IN ('all','women') на
Код: sql
1.
WHERE mns.filter IN (get_med_exam_filter_str(148))


то выходит пустой результат.
...
Рейтинг: 0 / 0
Запрос с хранимой функцией выдает 0 записей
    #40094737
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причем, если возвращается только 'all' или только 'women', то работает нормально. Он видимо никак не хочет строку через запятые воспринять как множество. Но написание вручную IN ('all','women') почему-то воспринимает как множество. Как выйти из положения?
...
Рейтинг: 0 / 0
Запрос с хранимой функцией выдает 0 записей
    #40094741
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad
Но написание вручную IN ('all','women') почему-то воспринимает как множество.
Не совсем так. 'all','women' и написано и воспринимается как ДВЕ строки, а не как одна.
...
Рейтинг: 0 / 0
Запрос с хранимой функцией выдает 0 записей
    #40094743
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkle
svnvlad
Но написание вручную IN ('all','women') почему-то воспринимает как множество.
Не совсем так. 'all','women' и написано и воспринимается как ДВЕ строки, а не как одна.

А результат функции ведь тоже выдает 'all','women'

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
BEGIN
  DECLARE res VARCHAR(30);
  DECLARE gender VARCHAR(10);
  DECLARE age INTEGER(10);
  
  SELECT p.sex, TIMESTAMPDIFF(YEAR, birthdate, curdate()) AS ag
  INTO gender, age
  FROM med_exam_patient mep
  INNER JOIN patient p ON p.id = mep.patient_id 
  WHERE mep.id = p_med_exam_patient_id;

  IF gender = "M" THEN
	SET res = "'all'";
  ELSEIF age < 40 THEN
    SET res = "'all','women'";
  ELSE
  	SET res = "'all','women','women40'";
  END IF;  

  RETURN res;
END
...
Рейтинг: 0 / 0
Запрос с хранимой функцией выдает 0 записей
    #40094750
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad
А результат функции ведь тоже выдает 'all','women'

Нет. Функция выдаёт
Код: sql
1.
"\'all\',\'women\',\'women40\'"


то есть не список значений, а ОДНО строковое значение, со списком внутри.

Нужно нечто вроде
Код: sql
1.
2.
3.
4.
-- в функции
SET res = 'all,women,women40';
-- в запросе
WHERE FIND_IN_SET(mns.filter, get_med_exam_filter_str(148))



PS. Не используй двойные кавычки в коде! А то установит какой дурак ANSI_QUOTES, пусть и случайно, и всё полетит в тартарары...

PPS. А нафига в функции переменные и куча операторов? всё ж делается одним запросом...
...
Рейтинг: 0 / 0
Запрос с хранимой функцией выдает 0 записей
    #40094757
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,
вот с FIND_IN_SET получилось!
А я пробовал, только в самой функции не убрал кавычки, поэтому не получалось.
А как одним запросом работать с двумя переменными? gender, age
...
Рейтинг: 0 / 0
Запрос с хранимой функцией выдает 0 записей
    #40094763
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad
А как одним запросом работать с двумя переменными? gender, age

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE FUNCTION get_med_exam_filter_str( p_med_exam_patient_id INT )
RETURNS VARCHAR(17)
RETURN ( SELECT CASE WHEN gender = 'M' 
                     THEN 'all'
                     WHEN TIMESTAMPDIFF(YEAR, birthdate, CURRENT_DATE) < 40     
	             THEN 'all,woman'
		     ELSE 'all,woman,woman40'
		     END 
         FROM med_exam_patient mep
         INNER JOIN patient p ON p.id = mep.patient_id 
         WHERE mep.id = p_med_exam_patient_id );
...
Рейтинг: 0 / 0
Запрос с хранимой функцией выдает 0 записей
    #40094891
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,
спасибо!
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос с хранимой функцией выдает 0 записей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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