Я пытаюсь создать простой цикл операторов SELECT в MySQL для сокращения кода. Я начал это с помощью CONCAT()
но это заставляет процедуру останавливаться/терпеть неудачу. Например (где k - счетчик циклов):
CONCAT('SELECT (Child_', k, ' INTO @Age_Child_', k, ' FROM lookup_childage WHERE ModYear = ModYear_var LIMIT 1)');
Чтобы диагностировать проблему, я просто попытался поместить инструкцию SELECT (без конкатенированных переменных цикла) внутри строки, чтобы выполнить ее. Хотя я мог бы заставить это работать для простых операторов, это не сработает для следующего:
SET @queryString = CONCAT('SELECT Child_1 INTO @Age_Child_1 FROM lookup_childage WHERE ModYear = ModYear_var LIMIT 1');
PREPARE stmt FROM @queryString;
EXECUTE stmt;
Кто-нибудь знает, почему @queryString
содержащий @queryString
CONCAT()
, не будет выполняться/вызывать сбой процедуры?
tl; dr Оператор, который вы пытаетесь написать, имеет форму SELECT(rest of statement) LIMIT 1
. Он должен иметь форму SELECT rest of statement LIMIT 1
.
Похоже, вы хотите создать имена переменных столбцов, ummm, потому что ваша таблица lookup_childage
денормализована. Я полагаю, что в таблице есть эти столбцы.
Child_1 INT
Child_2 INT
Child_3 INT
Child_4 INT
Похоже, вы надеетесь получить значение @queryString
содержащее такие вещи:
SELECT Child_4 INTO @Age_Child_4 FROM lookup_childage WHERE ModYear = ModYear_var LIMIT 1
Только 4
являются переменными.
Итак, чтобы получить нужную строку
SELECT CONCAT('SELECT Child_', k,
' INTO @Age_Child_', k,
' FROM lookup_childage WHERE ModYear = ModYear_var LIMIT 1'
)
INTO @queryString;