Как правильно рекурсировать в процедуре MySQL - PullRequest
0 голосов
/ 17 января 2019

Я использую MySQL 5.7. В основном я работаю в Workbench, чтобы попытаться определить правильный синтаксис для скрипта, который будет запускаться приложением. Логика, которую я хотел бы реализовать, не может быть реализована непосредственно в приложении.

Мне нужно проверить текстовое поле на наличие дубликатов. Гарантируется, что в настоящее время нет дубликатов. Я не привык писать какую-либо значимую логику (кроме запросов SELECT / UPDATE) в SQL, поэтому я изо всех сил. Я очень неопытен с синтаксисом. Что я хотел бы сделать, это

  1. Принять строку ввода

  2. Если эта входная строка найдена в aField внутри одной из строк в aTable

    2.1: Рекурс с начальным вводом, соединенным с каким-либо символом

Результат будет вставлен (вместе с некоторыми другими данными) в aTable.

Этот код показывает, что я хотел бы сделать, но, очевидно, синтаксически некорректен.

DELIMITER ;;

DROP PROCEDURE IF EXISTS getNoDupe;;
CREATE PROCEDURE getNoDupe(IN potentialDupe VARCHAR(50))
BEGIN
  SELECT IF( (SELECT aField FROM aTable WHERE aField = potentialDupe IS NULL), potentialDupe, NULL) INTO result;
  SELECT IFNULL(result, CALL getNoDupe(CONCAT(potentialDupe, "Garb"))
END;;

DELIMITER ;

CALL getNoDupe('adupe');

Ожидается, если в aTable нет записей с aField из 'adupe'

getNoDupe('adupe') => 'adupe'

Ожидается, если существует в aTable записях с aField из 'adupe'

getNoDupe('adupe') => 'adupey'

Ожидается, если есть в aTable записях с aField из 'adupe' И 'adupey'

getNoDupe('adupe') => 'adupeyy'
...