Oracle
 sql >> база данни >  >> RDS >> Oracle

Заменете част от полето със стойности от заявката

Може би не е най-ефективният, но работи рекурсивно (т.е. ако crit_description съдържа "заместители", те също се разширяват. (Първото решение, по-просто от показаното по-долу, не направи тази рекурсивна стъпка.) Вижте третия примерен вход, който добавих. Ще публикувам отново по-късно, ако мога да го изчистя още малко.

ЗАБЕЛЕЖКА:Това предполага, че всички „заместители“ действително се намират в criteria_info маса; Не съм тествал какво ще стане, ако не бъдат намерени. OP, за да посочите изискването.

with
     inputs ( criteria ) as (
       select '$1 = True' from dual union all
       select '$2 > $3'   from dual union all
       select '$1 = $4'   from dual
     ),
     criteria_info ( crit_id, crit_description ) as (
       select 1, 'Example 1' from dual union all
       select 2, 'Example 2' from dual union all
       select 3, 'Example 3' from dual union all
       select 4, '$2 + $3'   from dual
     ),
     rec ( criteria, new_str ) as (
       select  criteria, criteria
         from  inputs        
       union all       
       select  r.criteria, 
               regexp_replace(r.new_str, '\$\d+', c.crit_description, 1, 1)
         from  rec r inner join criteria_info c
               on to_number(regexp_substr(r.new_str, '\$(\d+)', 1, 1, null, 1)) = c.crit_id
         where regexp_substr(r.new_str, '\$\d+') is not null
     )
select criteria, new_str
from   rec
where  regexp_substr(new_str, '\$\d+') is null
;


CRITERIA  NEW_STR
--------- ------------------------------------
$1 = True Example 1 = True
$2 > $3   Example 2 > Example 3
$1 = $4   Example 1 = Example 2 + Example 3

3 rows selected.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Актуализацията на Oracle SQL Update отнема дни

  2. Преобразуване на ограничен низ в редове в oracle

  3. Как да използвам тип таблица в оператор SELECT FROM?

  4. Връщане на „таблица“ (без предварително дефинирани имена на колони) от PL/SQL функция

  5. Как да конвертирате времеви печат с милисекунди до дата в Oracle