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

Put your code in <code> and </code> tags

4 Responses to “Recursive PL/SQL”

  1. Francois Degrelle Says:

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

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

    SQL>

    ?

  2. Anonymous Says:

    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

  3. Laurent Schneider Says:

    sorry friends, I apologize for this copy paste error… I just posted my first try, but now I corrected my post!

  4. Frank Zhou Says:

    Laurent,

    Your recursive pl/sql solution is very elegant !
    I like it !!

    Here are two alternative pure sql solutions :

    http://oraqa.com/2007/04/01/how-to-remove-duplicate-chararacters-from-a-string-in-a-sql-statement-original-order-retained/

    Thanks,

    Frank

Leave a Reply

Use <code> and </code> to post code