Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Хранимая процедура / 14 сообщений из 14, страница 1 из 1
30.07.2014, 21:12:30
    #38709511
iOxYGeN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура
Здравствуйте форумчане.
Цель из Delphi XE отправить запрос на инсерт и получить ид вставленной записи.
Цель - необходимо передать параметр - строку с значением, например "Начальник" и отработать процедуру на сервере.
Запускаю эту фу-цию, и только при вводе цифры процедура отрабатывается, и говорит мне last_insert_id.
Если же ввести символ в строку с параметром выскакивает ошибка Unknown column 'Начальник' in field list

Создаю хранимую процедуру на MySQL.

BEGIN
DECLARE id INTEGER(5) DEFAULT 0;

INSERT INTO `roles` (typer) VALUES (zapros);

SET id=(Select last_insert_id());
RETURN id;
END

Настройки функции:
Parameter: `zapros` char
Return type: int(5)

Подскажите, пожалуйста, в чем ошибка. Может как то по хитрому нужно передавать параметр?
...
Рейтинг: 0 / 0
30.07.2014, 21:39:47
    #38709528
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура
Причем тут 'Начальник' - не знаю. Но вот беда - в MySQL в принципе нет анонимных процедур, код которой вы нам показываете.

И зачем для такой ерунды вообще процедура - непонятно.
Делайте в два отдельных вызова - INSERT и Select last_insert_id(). В зависимости от используемого API доступа к MySQL, возможно, в нем уже есть готовый вызов last_insert_id().
...
Рейтинг: 0 / 0
30.07.2014, 22:21:15
    #38709546
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура
miksoft,

можно ив один вызов делать.
...
Рейтинг: 0 / 0
30.07.2014, 22:36:50
    #38709551
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура
MasterZivmiksoft,

можно ив один вызов делать.Как?
Если речь про Multiple Statement Execution, то вряд ли оно поддерживается в дельфовых компонентах.
...
Рейтинг: 0 / 0
31.07.2014, 02:50:22
    #38709619
iOxYGeN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура
miksoft,
Имелось ввиду, что передав параметр из программы (char`овское значение "Начальник") в процедуру, в таблице "Роли" создастся запись, которая в поле "typer" будет иметь значение "Начальник".

roles
id typer
1 Администратор
2 Начальник
...
Рейтинг: 0 / 0
31.07.2014, 03:00:28
    #38709621
iOxYGeN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура
miksoft,
Сама процедура уже создана, как параметр передавать в неё тоже знаю)) вопрос почему не получается получить результат после передачи в неё параметра с топом char в INSERT INTO

Вот описание её(Для её создания использовал NaviCat)

CREATE DEFINER = `PAVEL`@`%` FUNCTION `NewProc`(`zapros` char)
RETURNS int(5)
BEGIN
DECLARE id INTEGER(5) DEFAULT 0;
INSERT INTO `roles` (typer) VALUES (zapros);

SET id=(Select last_insert_id());
RETURN id;
END;
...
Рейтинг: 0 / 0
31.07.2014, 06:48:31
    #38709638
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE DEFINER = `PAVEL`@`%` FUNCTION `NewProc`(`zapros` char)
RETURNS int(5)
BEGIN
DECLARE id INTEGER(5) DEFAULT 0;
INSERT INTO `roles` (typer) VALUES (zapros);

SET id=(Select last_insert_id());
RETURN id;
END; 



это не процедура, а функция, есть некоторая разница
...
Рейтинг: 0 / 0
31.07.2014, 09:35:47
    #38709702
Users
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура
iOxYGeN,

INSERT INTO `roles` (typer) VALUES (zapros);

Вот этот код абсолютно корректен. В таблицу roles в поле typer вставляется значение из zapros. Что лично я бы переделал - так это char на varchar и указал размер - varchar(15), но это к делу не относится.

Если при этом выдается сообщение:

Unknown column 'Начальник' in field list

То вывод однозначен - ошибка не в этой функции, а в другом месте. Смотрите, как именно вы ее вызываете и что делаете перед этим.
...
Рейтинг: 0 / 0
31.07.2014, 18:14:43
    #38710302
iOxYGeN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура
Разобрался, оказывается "запуская" в программе NaviCat фунцкию нужно было передавать параметр в одинарных кавычках 'Начальник'.
Теперь появилась другая проблема. Делая необходимый insert:
INSERT INTO models(status_model,refit,type_model_id,sn_model,supplier_id,warranty,date_reg,subtype_id) Values (zapros); //<-строка в ф-ции вместо прошлой с добавлением 1-ой записи.
Пытаюсь передать параметр(создал запрос в NaviCat(есть возможность создать query)):
GET_ID('2,0,25, '', 1, '2015-07-31', '2014-07-31', 262')
GET_ID - название функции. Такое ощущение что через 1 параметр(zapros) можно передать параметр только в 1 поле. Так что ли?
Я же хотел передать строку, чтобы в функции он вставился как значения для полей. Не получиться так сделать?
...
Рейтинг: 0 / 0
31.07.2014, 21:52:54
    #38710394
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура
iOxYGeN,

Один параметр - одно значение. Если нужно передать произвольное число параметров - передавайте одной строкой, а затем разбирайте ее в коде функции.
Как вариант - можно нужные значения вставить в специальную табличку, а функция из нее прочитает.
...
Рейтинг: 0 / 0
01.08.2014, 12:59:09
    #38710742
harlina66
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура
"Как вариант" - лучше не делать) могут возникнуть проблемы)
...
Рейтинг: 0 / 0
01.08.2014, 13:06:14
    #38710756
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура
harlina66"Как вариант" - лучше не делать) могут возникнуть проблемы)Тут как всегда - зависит от задачи. Бывает и так, что это получается наименее проблемный вариант.
...
Рейтинг: 0 / 0
03.08.2014, 18:55:58
    #38711673
iOxYGeN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура
Проблема решена, всем спасибо!
...
Рейтинг: 0 / 0
04.08.2014, 15:18:57
    #38712223
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура
On 30.07.2014 23:36, miksoft wrote:

> Как?
> Если речь про Multiple Statement Execution,

О нём.

то вряд ли оно
> поддерживается в дельфовых компонентах.

А что там поддерживать?
Там только один набор данных будет.
Но и более одного дельфя поддерживает.

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


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