CREATE OR ALTER procedure SPLIT (
    ITEXTO varchar(4000),
    ISEPARADOR varchar(10))
returns (
    OSPLIT varchar(4000))
as
declare variable VTEXTO varchar(4000);
declare variable VPOSICAO integer;
declare variable VPOSICAO_INICIAL integer;
declare variable VSPLIT varchar(4000);
declare variable TAM_SEP integer;
BEGIN
    vtexto = itexto;
    vposicao_inicial = 1;
    vposicao = 1;
    
    TAM_SEP = char_length(ISEPARADOR);

    IF (iseparador IS NULL OR itexto IS NULL) THEN
    BEGIN
        -- Sai da função sem executar
    END
    ELSE
    BEGIN
        WHILE (CHAR_LENGTH(vtexto) > 0) DO
        BEGIN
            vposicao = POSITION (:iseparador, vtexto, vposicao_inicial);
            IF (vposicao <= 0) THEN
            BEGIN
                vsplit = SUBSTRING (:vtexto FROM :vposicao_inicial FOR  CHAR_LENGTH (:vtexto) - vposicao_inicial + TAM_SEP);

                IF (NOT :vsplit IS NULL AND NOT :vsplit = '') THEN
                BEGIN
                    osplit = :vsplit;   
                    SUSPEND;
                END
                BREAK;
            END

            vsplit = SUBSTRING (:vtexto FROM :vposicao_inicial FOR :vposicao - vposicao_inicial);

            IF (NOT :vsplit IS NULL AND NOT :vsplit = '') THEN
            BEGIN
                osplit = :vsplit;   
            END

            vsplit = NULL;
            vposicao_inicial = :vposicao + TAM_SEP;
            SUSPEND;
        END
    END
END;