Неизвестный столбец в списке полей хранимой процедуры MySql - PullRequest
0 голосов
/ 03 апреля 2019

я просто создаю stored procedure Scorer, где parameter похожи на

enter image description here

это определение Stored procedure

  BEGIN
     set @inser = CONCAT('INSERT INTO activity8',' (ActivityType,ActivityChapter,ActivitySubject,ActivityClass,Student) VALUES (',Type,',',Chapter,',',Subject,',',Class,',',Student,')');

prepare stmt from @inser;
execute stmt ;
End

это структура таблицы деятельности8 table

enter image description here

сейчас, когда я звоню CALL Scorer('d',2,5,7,38)

почему выдает ошибку #1054 - Unknown column 'd' in 'field list'

Редактировать

это работает хорошо, когда я делаю CALL Scorer('"d"',2,5,7,38) или CALL Scorer("'d'",2,5,7,38) Может ли кто-нибудь объяснить, почему?

Ответы [ 3 ]

1 голос
/ 03 апреля 2019

Если ваши данные имеют тип varchar и вы используете CONCAT для построения запроса, тогда он не будет работать с одинарными кавычками, как вы уже видели, когда делаете

 set @inser = CONCAT('INSERT INTO activity8',' (ActivityType,ActivityChapter,ActivitySubject,ActivityClass,Student) VALUES (',Type,',',Chapter,',',Subject,',',Class,',',Student,')');

когда вы делаете CALL Scorer('d',2,5,7,38);

это означает, что ваш запрос

 @inser = INSERT INTO activity8 (ActivityType,ActivityChapter,ActivitySubject,ActivityClass,Student) VALUES 
(d,2,5,7,38)

это то, что ваш запрос здесь ваше varchar значение типа d без кавычек

поэтому одна цитата потребляется самой CONCAT

когда вы подготовите заявление

prepare stmt from @inser;
execute stmt ;

ваше varchar значение 'd' будет без кавычек

, поэтому вы должны поставить varchar paramter вот так "'d'" or '"d"'

одна цитата для concat и другая для самого запроса

0 голосов
/ 03 апреля 2019

enter image description here

Вероятно, из-за этого "Char" в Options для параметра "Type". Что это значит?

0 голосов
/ 03 апреля 2019

Попробуйте использовать двойные кавычки на d.

CALL Scorer("d",2,5,7,38)

Думаю, это должно вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...