Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Процедура и добавление кусков кода как параметр / 10 сообщений из 10, страница 1 из 1
08.05.2014, 20:17:37
    #38637218
ванно
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура и добавление кусков кода как параметр
Подскажите как добавить в процедуру именно кусок кода, например AND id = 2
у меня выскакивает ошибка
а если в параметр добавить значение, там где 2 ка сейчас - то работает без проблем
...
Рейтинг: 0 / 0
08.05.2014, 20:20:37
    #38637219
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура и добавление кусков кода как параметр
ванноПодскажите как добавить в процедуру именно кусок кодаПересоздать ее.
...
Рейтинг: 0 / 0
08.05.2014, 20:33:57
    #38637227
ванно
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура и добавление кусков кода как параметр
я ее пересоздавал сто раз
просто может mysql проверяет запрос на правильность сразу, и не позволяет добавлять куски кода
К примеру у меня кусок процедуры:
Код: plsql
1.
2.
3.
CREATE PROCEDURE proc1 (IN nbr CHAR(50),IN city CHAR(50))
...... AND `m`.`if` Like CONCAT('%',nbr, '%')) city ....
call proc1 ('тест','AND `c`.`id`=1 ');



как видим я хочу вместо параметра city "влупить" кусок кода 'AND `c`.`id`=1 ' и именно в таких случаях возникают ошибки
подскажите как поступить

Опишу свою задачу изначально:
задача по коду думаю ясна, в зависимости от IF (BOOL) выполняется далее тот или иной код (дальше еще будут ветвления if else)
Код: plsql
1.
2.
3.
4.
5.
IF EXISTS (SELECT 1 FROM ......) THEN
BEGIN
    SELECT .......;
END;
END IF;
...
Рейтинг: 0 / 0
08.05.2014, 20:39:32
    #38637232
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура и добавление кусков кода как параметр
ванно,

Вот когда пересоздаете, вот тогда и подставляйте 'AND `c`.`id`=1 ' вместо city.

ванноможет mysql проверяет запрос на правильность сразуда, именно так.

ванноОпишу свою задачу изначально:
задача по коду думаю ясна, в зависимости от IF (BOOL) выполняется далее тот или иной код (дальше еще будут ветвления if else)
Код: plsql
1.
2.
3.
4.
5.
IF EXISTS (SELECT 1 FROM ......) THEN
BEGIN
    SELECT .......;
END;
END IF;

Существуют такие конструкции, как IF .
...
Рейтинг: 0 / 0
08.05.2014, 21:16:54
    #38637244
ванно
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура и добавление кусков кода как параметр
miksoft,
спасибо конечно, но мы друг друга не поняли или я не понял ничего :)
мне нужно в параметр процедуры подставить 'AND `c`.`id`=1 '
я полагаю, что такое работать не будет просто так....

Код: plsql
1.
AND `m`.`if` =1 city -- и вот сюда в call proc1 ('AND `c`.`id`=1 ') будет подставляться значение  


в процессе создания процедуры уже выскакиевает ошибка 1064

мне нужна возможность подставлять именно "куски кода" в процедуру, т.к. с параметрами проблем нету
какой правильный путь
спасибо заранее
...
Рейтинг: 0 / 0
08.05.2014, 21:19:27
    #38637245
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура и добавление кусков кода как параметр
Вы, действительно, хотите странного.

Если нужно изменить только текст SQL-запроса (а не процедурного кода), который вызывается в процедуре, то посмотрите на prepared statements.
...
Рейтинг: 0 / 0
08.05.2014, 22:04:51
    #38637257
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура и добавление кусков кода как параметр
ванно
Код: plsql
1.
2.
3.
CREATE PROCEDURE proc1 (IN nbr CHAR(50),IN city CHAR(50))
...... AND `m`.`if` Like CONCAT('%',nbr, '%')) city ....
call proc1 ('тест','AND `c`.`id`=1 ');


Вы, действительно, хотите странного . (C)пёрто

Через какое-то время другой человек посмотрит процедуру на предмет расширения функциональности, и не понравится ему алиас С. Заменит он алиас, скажем, на S

Тут-то ваша программа и навернется, причем найти причину будет совсем не просто.
...
Рейтинг: 0 / 0
08.05.2014, 22:11:50
    #38637261
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура и добавление кусков кода как параметр
Код: plsql
1.
2.
3.
4.
CREATE PROCEDURE proc1 (IN nbr CHAR(50),IN city_id int)
...... AND `m`.`if` Like CONCAT('%',nbr, '%')) AND (city_id=0 or c.id=city_id) ....
call proc1 ('тест',1);
call proc1 ('тест',0);
...
Рейтинг: 0 / 0
08.05.2014, 22:56:17
    #38637274
ванно
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура и добавление кусков кода как параметр
спасибо
вот похожая статья на хабре
Жмяк
а как проще сделать?
при условии что нужно выполнить запросы исходя из результата первого (если первый не дал результат выполнить другой т.д.)
средствами простого mysql на PHP такого не сделать
я выбрал Mysqli, а не PDO, т.к. он быстрее в среднем на 6%
да и процедуры мощный инструмент
...
Рейтинг: 0 / 0
08.05.2014, 23:15:15
    #38637281
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура и добавление кусков кода как параметр
ванносредствами простого mysql на PHP такого не сделать
я выбрал Mysqli, а не PDO, т.к. он быстрее в среднем на 6%
да и процедуры мощный инструментУж простите, но Вы бы лучше не мифологию и хабр читали, а официальную доку. В т.ч. SQL Syntax for Prepared Statements
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Процедура и добавление кусков кода как параметр / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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