Я нашел неуклюжее, но функциональное решение для моей проблемы. Это работает для одномерного массива (больше измерений будет сложно) и ввода, который вписывается в varchar
:
declare pos int; -- Keeping track of the next item's position
declare item varchar(100); -- A single item of the input
declare breaker int; -- Safeguard for while loop
-- The string must end with the delimiter
if right(inputString, 1) <> '|' then
set inputString = concat(inputString, '|');
end if;
DROP TABLE IF EXISTS MyTemporaryTable;
CREATE TEMPORARY TABLE MyTemporaryTable ( columnName varchar(100) );
set breaker = 0;
while (breaker < 2000) && (length(inputString) > 1) do
-- Iterate looking for the delimiter, add rows to temporary table.
set breaker = breaker + 1;
set pos = INSTR(inputString, '|');
set item = LEFT(inputString, pos - 1);
set inputString = substring(inputString, pos + 1);
insert into MyTemporaryTable values(item);
end while;
Например, ввод для этого кода может быть строкой Apple|Banana|Orange
. MyTemporaryTable
будет заполнен тремя строками, содержащими строки Apple
, Banana
и Orange
соответственно.
Я думал, что медленная скорость обработки строк сделает этот подход бесполезным, но он был достаточно быстрым (всего лишь доли секунды для массива 1000 записей).
Надеюсь, это кому-нибудь поможет.