цепочка замен, plsql - PullRequest
       73

цепочка замен, plsql

1 голос
/ 03 августа 2020

Существует ли способ избежать цепочки замен партий? т.е.

select 
replace(replace(replace(replace( replace(replace(replace(replace(replace(replace(replace(replace(replace(

some_string

, '-&alpha;', '-alpha'), '&alpha;', 'alpha'), '-&beta;', '-beta'), '&beta;', 'beta'), '-&gamma;', '-gamma'), '&gamma;', 'gamma'), '-&delta;', 'delta'), '&delta;', 'delta'), '</', '<'), '<sub>'), '<SUB>'), '<i>'), '<sup>')
from dual

заранее спасибо!

1 Ответ

1 голос
/ 03 августа 2020

К сожалению, нет. Мой коллега недавно написал для этого функцию PL / SQL, примерно так:

PACKAGE BODY string_utils IS

   FUNCTION multi_replace
      ( p_string    VARCHAR2
      , p_search1   VARCHAR2
      , p_replace1  VARCHAR2 DEFAULT NULL
      , p_search2   VARCHAR2 DEFAULT NULL
      , p_replace2  VARCHAR2 DEFAULT NULL
      , p_search3   VARCHAR2 DEFAULT NULL
      , p_replace3  VARCHAR2 DEFAULT NULL
      , p_search4   VARCHAR2 DEFAULT NULL
      , p_replace4  VARCHAR2 DEFAULT NULL
      , p_search5   VARCHAR2 DEFAULT NULL
      , p_replace5  VARCHAR2 DEFAULT NULL
      , p_search6   VARCHAR2 DEFAULT NULL
      , p_replace6  VARCHAR2 DEFAULT NULL
      , p_search7   VARCHAR2 DEFAULT NULL
      , p_replace7  VARCHAR2 DEFAULT NULL
      , p_search8   VARCHAR2 DEFAULT NULL
      , p_replace8  VARCHAR2 DEFAULT NULL
      , p_search9   VARCHAR2 DEFAULT NULL
      , p_replace9  VARCHAR2 DEFAULT NULL
      ) RETURN          VARCHAR2
   IS
      l_result_str   VARCHAR2(32767) := p_string;
   BEGIN
      IF p_search1 IS NOT NULL THEN
         l_result_str := REPLACE(l_result_str, p_search1, p_replace1);
      END IF;

      IF p_search2 IS NOT NULL THEN
         l_result_str := REPLACE(l_result_str, p_search2, p_replace2);
      END IF;

      IF p_search3 IS NOT NULL THEN
         l_result_str := REPLACE(l_result_str, p_search3, p_replace3);
      END IF;

      IF p_search4 IS NOT NULL THEN
         l_result_str := REPLACE(l_result_str, p_search4, p_replace4);
      END IF;

      IF p_search5 IS NOT NULL THEN
         l_result_str := REPLACE(l_result_str, p_search5, p_replace5);
      END IF;

      IF p_search6 IS NOT NULL THEN
         l_result_str := REPLACE(l_result_str, p_search6, p_replace6);
      END IF;

      IF p_search7 IS NOT NULL THEN
         l_result_str := REPLACE(l_result_str, p_search7, p_replace7);
      END IF;

      IF p_search8 IS NOT NULL THEN
         l_result_str := REPLACE(l_result_str, p_search8, p_replace8);
      END IF;

      IF p_search9 IS NOT NULL THEN
         l_result_str := REPLACE(l_result_str, p_search9, p_replace9);
      END IF;

      RETURN l_result_str;

   END multi_replace;

END;
...