Recursive PL/SQL

it will be a good week !

I found an elegant way to solve a query with recursive pl/sql.

an user wanted to have DHSGHDADSFDF translated in DHSGAF, that is, duplicated chars removed, order retained.

here is my function :

create or replace function f(v varchar2) return varchar2 is
begin
    if (v is null) then return null;
    else return substr(v,1,1)||f(replace(substr(v,2),substr(v,1,1));
    end if;
end;
/

ref: using recursion with PL/SQL

4 thoughts on “Recursive PL/SQL”

  1. SQL> select f(‘DHSGHDADSFDF’) from dual
    2 /

    F(‘DHSGHDADSFDF’)
    —————————————-
    DHSGHDADSFDF

    SQL>

    ?

  2. Probably is meant
    CREATE OR REPLACE FUNCTION f(v VARCHAR2) RETURN VARCHAR2 IS
    BEGIN
    IF (v IS NULL) THEN
    RETURN NULL;
    ELSE
    RETURN Substr(v, 1, 1) || f(REPLACE(v, Substr(v, 1, 1), ”));
    END IF;
    END;
    /

    Regards
    Maxim

Leave a Reply

Your email address will not be published.


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>