SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 06.04.2010 22:31:50

mysqluser
Завсегдатай
Зарегистрирован: 06.04.2010
Сообщений: 31

Ошибка procedure - insert

Приветствую smile

Столкнулся с такой проблемой, что не получается выполнить call процедуры.


call db1.test1('mylogin','path','name','descr','cathegory')
 


Выбрасывает странную ошибку
1054
#42S22Unknown column 'mylogin' in 'field list'

Вот код процедуры:


CREATE PROCEDURE db1.test1(
IN loginp varchar(20),
IN upload_file_save_pathp varchar(127),
IN upload_file_namep varchar(50),
IN upload_file_descp varchar(127),
IN upload_file_cathegoryp varchar(20)
)
BEGIN


set @sql=concat('CREATE TABLE IF NOT EXISTS db1.',loginp,'(
upload_file_save_path varchar(127),
upload_file_name varchar(50) ,
upload_file_desc varchar(127) ,
upload_file_cathegory varchar(20) ,
upload_date date ,
id int NOT NULL,  PRIMARY KEY (id)) TYPE = MyISAM ROW_FORMAT =DEFAULT'
);

PREPARE s1 from @sql;
EXECUTE s1;
DEALLOCATE PREPARE s1;

set @sql2=concat(
'INSERT INTO db1.',loginp,'(upload_file_save_path,upload_file_name,upload_file_desc,upload_file_cathegory,upload_date,id) VALUES(',upload_file_save_pathp,',',upload_file_namep,',',upload_file_descp,',',upload_file_cathegoryp,',',CURRENT_DATE,',1);');

PREPARE s2 from @sql2;
EXECUTE s2;
DEALLOCATE PREPARE s2;


END

 


ЗЫ: версия MySQL 5.5.2

Заранее благодарен за полезные комментарии

Отредактированно mysqluser (06.04.2010 22:35:39)

Неактивен

 

#2 06.04.2010 23:01:29

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ошибка procedure - insert

Причина в вашей версии. У меня ругается на неизвестную колонку path, но так и должно быть, так как после подстановки значений в переменную @sql2 запрос будет иметь след вид:

... VALUES(path,name,...
т.е. отсутствует экранирование.

Нужно:
"INSERT INTO db1.",loginp,"(upload_file_save_path,upload_file_name,upload_file_desc,upload_file_cathegory,upload_date,id)
VALUES('",upload_file_save_pathp,"','",upload_file_namep,"','",upload_file_descp,"','",upload_file_cathegoryp,"',",CURRENT_DATE,",1);");

Неактивен

 

#3 06.04.2010 23:04:27

mysqluser
Завсегдатай
Зарегистрирован: 06.04.2010
Сообщений: 31

Re: Ошибка procedure - insert

Не совсем понимаю что с версией не так? Вроде те примеры с офиц сайта по ним собсно и составлял sad
Простите за мое ЧаВо... А что значит "отсутствует экранирование" ?

Неактивен

 

#4 06.04.2010 23:11:06

mysqluser
Завсегдатай
Зарегистрирован: 06.04.2010
Сообщений: 31

Re: Ошибка procedure - insert

Насчет двойных кавычек - это немного странно, так как до этого я выполнял код типа

CREATE PROCEDURE db1.test1(
IN loginp varchar(20))
BEGIN


set @sql=concat('CREATE TABLE IF NOT EXISTS uploadimageservice.',loginp,'(
upload_file_save_path varchar(127),
upload_file_name varchar(50) ,
upload_file_desc varchar(127) ,
upload_file_cathegory varchar(20) ,
upload_date date ,
id int NOT NULL,  PRIMARY KEY (id)) TYPE = MyISAM ROW_FORMAT =DEFAULT'
);

PREPARE s1 from @sql;
EXECUTE s1;
DEALLOCATE PREPARE s1;

END


И с одинарными создавало таблицу без проблем :*(

Неактивен

 

#5 06.04.2010 23:26:02

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ошибка procedure - insert

Напишите как будет выглядеть ваш запрос на добавление значений 'path','name','descr','cathegory' в таблицу 'mylogin', если вы будете его выполнять в клиенте mysql, т.е. просто наберете руками.

Неактивен

 

#6 06.04.2010 23:32:31

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ошибка procedure - insert

mysqluser написал:

Не совсем понимаю что с версией не так?

5.1.45 это наибольшая стабильная версия.
а в 5.5.2 могут быть глюки в связи с тем, что версия ещё сырая.

Неактивен

 

#7 06.04.2010 23:32:48

mysqluser
Завсегдатай
Зарегистрирован: 06.04.2010
Сообщений: 31

Re: Ошибка procedure - insert

vasya написал:

Нужно:
"INSERT INTO db1.",loginp,"(upload_file_save_path,upload_file_name,upload_file_desc,upload_file_cathegory,upload_date,id)
VALUES('",upload_file_save_pathp,"','",upload_file_namep,"','",upload_file_descp,"','",upload_file_cathegoryp,"','",CURRENT_DATE,"',1);");

Это хорошо, но почему-то concat не хочет принимать в параметры строки "" ?

Неактивен

 

#8 06.04.2010 23:37:15

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ошибка procedure - insert

mysqluser написал:

Насчет двойных кавычек - это немного странно, так как до этого я выполнял код типа

CREATE PROCEDURE db1.test1(
IN loginp varchar(20))
BEGIN


set @sql=concat('CREATE TABLE IF NOT EXISTS uploadimageservice.',loginp,'(
upload_file_save_path varchar(127),
upload_file_name varchar(50) ,
upload_file_desc varchar(127) ,
upload_file_cathegory varchar(20) ,
upload_date date ,
id int NOT NULL,  PRIMARY KEY (id)) TYPE = MyISAM ROW_FORMAT =DEFAULT'
);

PREPARE s1 from @sql;
EXECUTE s1;
DEALLOCATE PREPARE s1;

END


И с одинарными создавало таблицу без проблем :*(

Я и не предлагаю использовать двойные кавычки в запросе создания таблицы, так как он написан правильно.
А вот второй запрос (на добавление данных) в первоначальном исполнении неверен.

Неактивен

 

#9 06.04.2010 23:38:23

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ошибка procedure - insert

mysqluser написал:

Это хорошо, но почему-то concat не хочет принимать в параметры строки "" ?

В чем выражается не хочет?

Неактивен

 

#10 06.04.2010 23:48:30

mysqluser
Завсегдатай
Зарегистрирован: 06.04.2010
Сообщений: 31

Re: Ошибка procedure - insert

vasya написал:

mysqluser написал:

Это хорошо, но почему-то concat не хочет принимать в параметры строки "" ?

В чем выражается не хочет?

красным не подсвечивает smile

Неактивен

 

#11 06.04.2010 23:50:57

mysqluser
Завсегдатай
Зарегистрирован: 06.04.2010
Сообщений: 31

Re: Ошибка procedure - insert

vasya написал:

Напишите как будет выглядеть ваш запрос на добавление значений 'path','name','descr','cathegory' в таблицу 'mylogin', если вы будете его выполнять в клиенте mysql, т.е. просто наберете руками.

Ну вот такой код глотает без проблем


insert into db1.test1(upload_file_save_path, upload_file_name, upload_file_desc, upload_file_cathegory, upload_date, id)
values('hoho','Flowers','summer_photo','VACATIONS',CURRENT_DATE,1);
 


Даже не знаю, почему процедура выкидывает фокусы ?

Неактивен

 

#12 06.04.2010 23:51:16

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ошибка procedure - insert

mysqluser написал:

Ну вот такой код глотает без проблем

insert into db1.test1(upload_file_save_path, upload_file_name, upload_file_desc, upload_file_cathegory, upload_date, id)
values('hoho','Flowers','summer_photo','VACATIONS',CURRENT_DATE,1);


Даже не знаю, почему процедура выкидывает фокусы ? sad

Потому, что ваша процедура формирует код


insert into db1.test1(upload_file_save_path, upload_file_name, upload_file_desc, upload_file_cathegory, upload_date, id)
values(hoho,Flowers,summer_photo,VACATIONS,CURRENT_DATE,1);


И вы закономерно получите ошибку - неизвестная колонка hoho

Отсутствие кавычек и значит, что передаваемые значения не экранированы, и воспринимаются не как строковые константы.

Неактивен

 

#13 06.04.2010 23:53:43

mysqluser
Завсегдатай
Зарегистрирован: 06.04.2010
Сообщений: 31

Re: Ошибка procedure - insert

vasya написал:

mysqluser написал:

Ну вот такой код глотает без проблем

insert into db1.test1(upload_file_save_path, upload_file_name, upload_file_desc, upload_file_cathegory, upload_date, id)
values('hoho','Flowers','summer_photo','VACATIONS',CURRENT_DATE,1);


Даже не знаю, почему процедура выкидывает фокусы ? sad

Потому, что ваша процедура формирует код


insert into db1.test1(upload_file_save_path, upload_file_name, upload_file_desc, upload_file_cathegory, upload_date, id)
values(hoho,Flowers,summer_photo,VACATIONS,CURRENT_DATE,1);


И вы закономерно получите ошибку - неизвестная колонка hoho

Отсутствие кавычек и значит, что передаваемые значения не экранированы, и воспринимаются не как строковые константы.

Как решить такую проблему? Переписать без concat? просто "A"+"B" ?

Неактивен

 

#14 06.04.2010 23:57:53

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ошибка procedure - insert

mysqluser написал:

Как решить такую проблему? Переписать без concat? просто "A"+"B" ?

И зачем я спрашивается переписывал ваш запрос, раставляя правильным образом кавычки, в своем первом ответе в этой теме?

Неактивен

 

#15 07.04.2010 00:07:13

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ошибка procedure - insert

mysqluser написал:

vasya написал:

mysqluser написал:

Это хорошо, но почему-то concat не хочет принимать в параметры строки "" ?

В чем выражается не хочет?

красным не подсвечивает smile

Проглядел ваш ответ.
Где подсвечивает??
Выполнить не пробовали wink

Неактивен

 

#16 07.04.2010 00:15:01

mysqluser
Завсегдатай
Зарегистрирован: 06.04.2010
Сообщений: 31

Re: Ошибка procedure - insert

vasya написал:

mysqluser написал:

vasya написал:


В чем выражается не хочет?

красным не подсвечивает smile

Проглядел ваш ответ.
Где подсвечивает??
Выполнить не пробовали wink

Вот как раз пробую, но выбрасывает #42000 ?

Неактивен

 

#17 07.04.2010 00:19:45

mysqluser
Завсегдатай
Зарегистрирован: 06.04.2010
Сообщений: 31

Re: Ошибка procedure - insert

concat(
"INSERT INTO db1.",loginp,"(upload_file_save_path,upload_file_name,upload_file_desc,upload_file_cathegory,upload_date,id) VALUES(" ',upload_file_save_pathp,' "," ',upload_file_namep,' "," ',upload....)


Внутри функции при таком подходе цвет строки не красный а как если бы при статическом вводе. sad

Неактивен

 

#18 07.04.2010 00:27:09

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Ошибка procedure - insert

Вам шашечки или ехать?

Выбросьте свой редактор на помойку, возьмите блокнот — он не умеет
подсвечивать синтаксис и поэтому не будет Вас смущать.

Неактивен

 

#19 07.04.2010 00:32:06

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ошибка procedure - insert

mysqluser написал:

Внутри функции при таком подходе цвет строки не красный а как если бы при статическом вводе. sad

Подсвечивает-то он у вас правильно.
Но если вы скопируете пример из моего первого ответа в этой теме или просто пристально на него посмотрите, то обратите внимание, что порядок кавычек там другой wink

Неактивен

 

#20 07.04.2010 03:18:12

mysqluser
Завсегдатай
Зарегистрирован: 06.04.2010
Сообщений: 31

Re: Ошибка procedure - insert

vasya написал:

mysqluser написал:

Внутри функции при таком подходе цвет строки не красный а как если бы при статическом вводе. sad

Подсвечивает-то он у вас правильно.
Но если вы скопируете пример из моего первого ответа в этой теме или просто пристально на него посмотрите, то обратите внимание, что порядок кавычек там другой wink

Спасибо smile То есть нужно иммитировать кавычки wink Понятно...
Но вот тот код, что вы предлагаете работает без concat, если чисто производить инициализацию, а вот в функции не работает почему-то sad Но может я не так что-то понял... ?

Неактивен

 

#21 07.04.2010 08:38:51

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ошибка procedure - insert

У меня ваша функция, если исправить кавычки отрабатывает. Следовательно или вы допустили иную ошибку, или причина в сырой версии (тогда нужно поставить более стабильную версию).

Как сейчас выглядит функция и какая ошибка возникает?

Неактивен

 

#22 07.04.2010 22:37:46

mysqluser
Завсегдатай
Зарегистрирован: 06.04.2010
Сообщений: 31

Re: Ошибка procedure - insert

vasya написал:

У меня ваша функция, если исправить кавычки отрабатывает. Следовательно или вы допустили иную ошибку, или причина в сырой версии (тогда нужно поставить более стабильную версию).

Как сейчас выглядит функция и какая ошибка возникает?

посоветуйте какой-нить редактор, чтобы удобный был. потому что у меня стоит DreamCoder

Неактивен

 

#23 07.04.2010 22:53:03

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ошибка procedure - insert

Неактивен

 

#24 07.04.2010 23:37:54

mysqluser
Завсегдатай
Зарегистрирован: 06.04.2010
Сообщений: 31

Re: Ошибка procedure - insert

Спасибо - обязательно посмотрю smile

Но вот я не пойму есть ли в написании кода ограничения по применению

пишу обычный код


CREATE PROCEDURE db1.test1(
IN a varchar(20),
IN b varchar(20),
IN c varchar(20),
IN d varchar(20))

BEGIN

@sql=concat(
'INSERT INTO db1.testable(
upload_file_save_path,
upload_file_name,
upload_file_desc,
upload_file_cathegory,
upload_date,id)
VALUES("'
,a,'","',b,'","',c,'","',d,'",',CURRENT_DATE,',4)');
PREPARE s1 FROM @sql;
EXECUTE s1;
DEALLOCATE PREPARE s1;
END


Но выбрасывает ошибку
ERROR 1046
... check manual that corresponds to your MySQL version for the right syntax to use near 'END'

И более того на консоли идет статистика выполнения не всего кода а его частей, то есть не распознает от BEGIN до END?

Отредактированно mysqluser (08.04.2010 03:58:53)

Неактивен

 

#25 07.04.2010 23:41:56

mysqluser
Завсегдатай
Зарегистрирован: 06.04.2010
Сообщений: 31

Re: Ошибка procedure - insert

хотя вот такой код глотает без проблем

INSERT INTO db1.testable(upload_file_save_path,upload_file_name,upload_file_desc,upload_file_cathegory,upload_date,id)
VALUES("bobo","football","my passion","FAVORITIES",CURRENT_DATE(),2);


непонятная задачка какая-то получается sad

Отредактированно mysqluser (07.04.2010 23:48:33)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson