[Oracle] String ersetzen

BaseBallBatBoy

Erfahrenes Mitglied
Hallo!

Ich habe eine Tabelle vor mir die vereinfacht so aussieht:

Code:
mytable

type           | id       | name           | formula
-------------------------------------------------------------
"simple"     | 1        | "COUNT"      | "<1>"
"simple"     | 2        | "DISTINCT"  | "<2>"
"simple"     | 3        | "mycol"        | "<3>"
"complex"  | 4        | null              | "<1>(<2> <3>)"

Bei den Elementen die complex sind, möchte ich den formula String ersetzen.
Hier sollte ich am Ende für id 4 folgendes haben: "COUNT(DISTINCT mycol)".

Vielleicht ist mein Kopf schon im Wochenende, jedenfalls komme ich momentan echt nicht drauf....
Hat mir jemand einen Tipp?
 
Habe es irgendwie hingekriegt:

SQL:
select
   type, id, name, formula, value
from 
   mytable
   left join (
      select
         id_complex,
         listagg(decode(pos, 2, name, part)) within group (order by occ, pos) as value
      from 
         (
            select
               id_complex, occ, pos,
               regexp_replace(pair, '^(.*?)(<.*?>)$', '\'||pos) as part
            from
               (
                  select
                     id as id_complex,
                     occ,
                     regexp_substr(formula||'<>', '.*?<.*?>', 1, occ) as pair
                  from
                     (
                        select level as occ from dual
                        connect by level <= (select max(length(formula)) from mytable)
                     ),
                     mytable
                  where type = 'complex'
               ),
               (select level as pos from dual connect by level <= 2)
         )
         left join mytable on part = formula and type = 'simple'
      group by id_complex
   ) on id = id_complex
order by id;
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück