#mysql #sql
#mysql #sql
Вопрос:
У меня есть база данных слов на английском языке, я хочу создать процедуру в mysql, входным аргументом процедуры является слово. цель процедуры — взять первый алфавит данного входного слова и вернуть все слова, исходящие из этого алфавита. например: вызовите new_procedure(‘action’,@total); эта команда должна вернуть мне все слова из моей базы данных, которые начинаются с ‘a’ . я написал следующий код, но он возвращает нулевые строки: ( помогите мне, я новичок в mysql
CREATE DEFINER=`root`@`localhost` PROCEDURE `new_procedure`(in error_word varchar(30),
out total varchar(50))
BEGIN
declare xx varchar(2);
set xx = substring('error_word',1,1);
select word from words
where word like 'xx%'
into total;
END
Комментарии:
1. Вы не можете заключать
xx
внутренние кавычки, потому что тогда они обрабатываются как литеральная строка ‘xx’, а не как переменная с именем xx. Вам нужно использоватьCONCAT(xx, '%')
2. да, спасибо, команда concat работает. но я думаю, что есть некоторая проблема с возвратом выходных данных. я ожидаю получить как минимум 1000 строк обратно, но получаю пустую строку: (
3. Если вы хотите, чтобы результат возвращался из процедуры MySQL, просто выполните SELECT, не используйте
INTO total
. Затем извлеките изCALL
запроса в вашем приложении, как если бы вы выбирали. Процедура будет иметь набор результатов.
Ответ №1:
Попробуйте изменить свой код, чтобы найти / вернуть определенное слово в вашей таблице, и это скажет вам, правильный ли базовый синтаксис вашей процедуры.
Пример … попросите его выполнить поиск в таблице записи, содержащей слово «действие», и вернуть результаты…
Другими словами, закомментируйте код, который пытается установить xx = на первый символ аргумента… и измените свой код, чтобы просто использовать весь аргумент в запросе.
Тогда вы знаете, что процедура и запрос работают.
Затем начните просматривать свой синтаксис для синтаксического анализа аргумента и получения его в вашей переменной.
Прошло много времени с тех пор, как я работал с MySQL, но я подумал, что попробую предложить метод устранения неполадок. Надеюсь, я правильно объяснил.
Ответ №2:
CREATE DEFINER=`root`@`localhost` PROCEDURE `new_procedure`(in error_word varchar(30),
out total varchar(50))
BEGIN
select word from words
where word LIKE '%' @error_word '%'
into total;
END