возврат из процедуры в mysql?

#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