[Firebird] 文字列を分割する的な何か、str_split とか str.split みたいな

可変引数的な使い方をしたくて作った。
SQL は単体で動かす分にはいいけど(それだけで使い物になるわけ無いが)、プログラミング言語から叩くと途端に泥臭くなるから困る。
長さ? 可変長文字列型くらい用意しとけよ今時…

SET TERM !! ;

CREATE PROCEDURE str_split(
    string VARCHAR(252) CHARACTER SET UNICODE_FSS,
    sep VARCHAR(252) CHARACTER SET UNICODE_FSS DEFAULT ' ',
    maxsplit INTEGER DEFAULT 126
    )
RETURNS(
    result VARCHAR(252) CHARACTER SET UNICODE_FSS
    )
AS
    DECLARE VARIABLE p INTEGER;
    DECLARE VARIABLE n INTEGER;
BEGIN
    n = 0;
    WHILE (string <> '') DO BEGIN
        p = POSITION(sep, string);
        IF (p = 0 OR n >= maxsplit) THEN
            p = CHAR_LENGTH(string);
        ELSE
            p = p - 1;
        result = SUBSTRING(string FROM 1 FOR p);
        SUSPEND;
        string = SUBSTRING(string FROM p + 2);
        n = n + 1;
    END
END !!

SET TERM ; !!

SELECT * FROM str_split('a,b,c', ',');
RESULT
===============================================================================
a
b
c