powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Динамический запрос
16 сообщений из 16, страница 1 из 1
Динамический запрос
    #39675272
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, почему вызов хранимой процедуры не возвращает значения.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
DROP PROCEDURE IF EXISTS request.sp_get_requests_list;

CREATE DEFINER = `root` @`%`
PROCEDURE request.sp_get_requests_list(IN in_person_id       int(20),
                                       IN in_regdate_start   date)
   LANGUAGE SQL
   DETERMINISTIC
   CONTAINS SQL
   SQL SECURITY DEFINER
BEGIN
   DECLARE v_and_flag       BOOL DEFAULT FALSE;
   DECLARE v_where_clause   VARCHAR(255) DEFAULT '';
   DECLARE v_role_code      VARCHAR(255);
   DECLARE v_sql            VARCHAR(1024) DEFAULT '';
   SET @in_regdate_start = 'in_regdate_start';

   SET v_where_clause = CONCAT(' WHERE createdate=?');

   SET @sql = CONCAT('SELECT * FROM vw_requests_list', v_where_clause);

   PREPARE STMT FROM @sql;

   EXECUTE STMT USING @in_regdate_start;

   DEALLOCATE PREPARE STMT;
END;


call sp_get_requests_list(1,STR_TO_DATE('01.02.2016',"%d.%m.%Y")) ;





Подозреваю, что дело в форматах даты.
...
Рейтинг: 0 / 0
Динамический запрос
    #39675280
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гггг-mm-dd так надо
...
Рейтинг: 0 / 0
Динамический запрос
    #39675282
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet,

CONCAT(' WHERE createdate=?'); это что???
...
Рейтинг: 0 / 0
Динамический запрос
    #39675283
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
SET @sql = 'SELECT * FROM vw_requests_list WHERE createdate=?';
...
Рейтинг: 0 / 0
Динамический запрос
    #39675284
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя, а как не зависимо от региональных настроек даты это сделать, ибо обычный запрос типа
Select * from vw_requests_list where createdate=STR_TO_DATE('01.02.2016',"%d.%m.%Y")
Данные возвращает!
...
Рейтинг: 0 / 0
Динамический запрос
    #39675285
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SET @in_regdate_start = in_regdate_start;
...
Рейтинг: 0 / 0
Динамический запрос
    #39675286
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя, там часть where удалил, забыл concat убрать, правда это не меняет ничего
...
Рейтинг: 0 / 0
Динамический запрос
    #39675287
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnetвадя, а как не зависимо от региональных настроек даты это сделать, ибо обычный запрос типа
Select * from vw_requests_list where createdate=STR_TO_DATE('01.02.2016',"%d.%m.%Y")
Данные возвращает!это правильно, мой вариант, если не использовать STR_TO_DATE
...
Рейтинг: 0 / 0
Динамический запрос
    #39675288
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnetвадя, там часть where удалил, забыл concat убрать, правда это не меняет ничего
Код: sql
1.
SET @in_regdate_start = 'in_regdate_start'; 

присвоение строки

Код: sql
1.
SET @in_regdate_start = in_regdate_start; 

присвоение значения из входного параметра
...
Рейтинг: 0 / 0
Динамический запрос
    #39675290
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

Так как будет выглядеть хранимая процедура вне зависимости от региональных настроек даты ?
...
Рейтинг: 0 / 0
Динамический запрос
    #39675357
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnetТак как будет выглядеть хранимая процедура вне зависимости от региональных настроек даты ?так как у тебя - главное ей в правильном формате скормить дату
...
Рейтинг: 0 / 0
Динамический запрос
    #39675363
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

с USING получилось

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
DROP PROCEDURE IF EXISTS request.sp_get_requests_list;

CREATE DEFINER = `root` @`%`
PROCEDURE request.sp_get_requests_list(IN in_person_id       int(20),
                                       IN in_regdate_start   date)
   LANGUAGE SQL
   DETERMINISTIC
   CONTAINS SQL
   SQL SECURITY DEFINER
BEGIN
   DECLARE v_and_flag       BOOL DEFAULT FALSE;
   DECLARE v_where_clause   VARCHAR(255) DEFAULT '';
   DECLARE v_role_code      VARCHAR(255);
   DECLARE v_sql            VARCHAR(1024) DEFAULT '';
   SET @in_regdate_start = in_regdate_start;

   SET v_where_clause = ' WHERE createdate=?';

   SET @sql = CONCAT('SELECT * FROM vw_requests_list', v_where_clause);

   PREPARE STMT FROM @sql;

   EXECUTE STMT USING @in_regdate_start;

   DEALLOCATE PREPARE STMT;
END;



Делаю вот так - не получается, почему так ?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
DROP PROCEDURE IF EXISTS request.sp_get_requests_list;

CREATE DEFINER = `root` @`%`
PROCEDURE request.sp_get_requests_list(IN in_person_id       int(20),
                                       IN in_regdate_start   date)
   LANGUAGE SQL
   DETERMINISTIC
   CONTAINS SQL
   SQL SECURITY DEFINER
BEGIN
   DECLARE v_and_flag       BOOL DEFAULT FALSE;
   DECLARE v_where_clause   VARCHAR(255) DEFAULT '';
   DECLARE v_role_code      VARCHAR(255);
   DECLARE v_sql            VARCHAR(1024) DEFAULT '';

   SET v_where_clause = CONCAT(' WHERE createdate=', in_regdate_start);

   SET @sql = CONCAT('SELECT * FROM vw_requests_list', v_where_clause);

   PREPARE STMT FROM @sql;

   EXECUTE STMT;

   DEALLOCATE PREPARE STMT;
END;
...
Рейтинг: 0 / 0
Динамический запрос
    #39675378
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Код: sql
1.
SET v_where_clause = CONCAT(' WHERE createdate=', in_regdate_start);



Вот тут ошибка. Вы после конкатенации получите нечто типа
Код: sql
1.
WHERE createdate=2018-01-01


что будет преобразовано в
Код: sql
1.
WHERE createdate=2016


Правда, слегка не то, что нужно?
Обрамите присоединяемое значение одинарными кавычками, чтобы после конкатенации получилось не сравнение с результатом арифметического выражения, а сравнение с литералом.
...
Рейтинг: 0 / 0
Динамический запрос
    #39675521
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,
Пробую
Код: sql
1.
call sp_get_requests_list(1,STR_TO_DATE('01.02.2016',"%d.%m.%Y")) ;



Получаю ошибку
Код: sql
1.
Unknown column 'in_regdate_start' in 'where clause'



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SET v_where_clause = CONCAT(' WHERE createdate=', 'in_regdate_start');

   SET @sql = CONCAT('SELECT * FROM vw_requests_list', v_where_clause);

   PREPARE STMT FROM @sql;

   EXECUTE STMT;

   DEALLOCATE PREPARE STMT;
...
Рейтинг: 0 / 0
Динамический запрос
    #39675539
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet,

Код: sql
1.
 SET @v_where_clause = CONCAT(' WHERE createdate= \'', in_regdate_start,'\'');
...
Рейтинг: 0 / 0
Динамический запрос
    #39675579
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

спасибо огромное, в точку.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Динамический запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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