Witam wszystkich
Próbuję napisać prostą procedurę w oparciu o system bazodanowy MySQL, która ma przyjmować jeden parametr w postaci odpowiedniego ciągu znaków, która ma z kolei podzielić go na krótsze ciągi znaków (z wykorzystaniem seperatora), tak, aby każdy z nich stanowił liczbę większą od 0 - w przeciwnym wypadku - lub jeśli taki podciąg znaków w ogóle nie będzie liczbą ma zostać odrzucony. Wynik ma zostać zwrócony w postaci jednokolumnowej tabeli. Niestety, z nieznanej przyczyny, nie otrzymuję odpowiednich rezultatów. Może ktoś zerkie na kod i pomoże mi w naprawieniu błędu?
Procedura funkcja (nie wymagają żadnej tabeli w bazie danych):
CREATE DEFINER=`root`@`localhost` PROCEDURE `new_procedure`(
IN variants VARCHAR(50)
)
BEGIN
DECLARE counter INT DEFAULT 0;
SET
@validated_params = FALSE,
@params_number = (CHAR_LENGTH(variants) - CHAR_LENGTH(REPLACE(variants, ';', '')) + 1
);
SET
@correct_params = JSON_ARRAY('[3, 1]');
WHILE counter < @params_number DO
SET
counter = counter + 1;
SET
@variant = split_string(@variants, ';', counter);
IF @variant > 0 THEN
SET
@correct_params = JSON_ARRAY_APPEND(@correct_params, '$', @variant);
END IF;
END WHILE;
IF JSON_LENGTH(@correct_params) = @params_number THEN
SET
@validated_params = TRUE;
END IF;
SELECT variant_number FROM JSON_TABLE(@correct_params, '$[*]' COLUMNS (variant_number INT PATH '$')) AS variant_number;
END
CREATE DEFINER=`root`@`localhost` FUNCTION `split_string`(
string_to_split VARCHAR(250),
delimimiter VARCHAR(5),
position INT
) RETURNS int
DETERMINISTIC
BEGIN
SET
@splitted_string = REPLACE(
SUBSTRING(
SUBSTRING_INDEX(string_to_split, delimimiter, position),
CHAR_LENGTH(SUBSTRING_INDEX(string_to_split, delimimiter, position - 1)) + 1
), delimimiter, ''
);
SET
@splitted_number = (
CASE WHEN @splitted_string REGEXP '^[0-9]+$' THEN
CAST(@splitted_string AS UNSIGNED) ELSE -1 END
);
RETURN @splitted_number;
END
Odpalenie procedury z przykładowymi poniższymi parametrami:
CALL new_procedure('2, b7, vb, 9');
Powinniśmy otrzymać tabelę w postaci:
Jednak otrzymuję pustą tabelę... 
Z góry dzięki za uwagę i pozdrawiam.