Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zastąp część pola wartościami z zapytania

Być może nie jest to najbardziej wydajne, ale działa rekurencyjnie (to znaczy, jeśli crit_description sama zawiera "symbole zastępcze", które również są rozwijane. (Pierwsze rozwiązanie, prostsze niż to, które pokazano poniżej, nie wykonało tego rekurencyjnego kroku.) Zobacz trzeci przykładowy wkład, który dodałem. Opublikuję ponownie później, jeśli będę mógł to posprzątać.

UWAGA:zakłada się, że wszystkie „symbole zastępcze” znajdują się w criteria_info stół; Nie testowałem, co się stanie, jeśli nie zostaną znalezione. OP, aby określić wymagania.

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. jak oddać połączenie dbcp do połączenia Oracle?

  2. Jak zmienić nazwę węzła Oracle XMLTYPE?

  3. Pokaż wykorzystanie procesora Oracle dla sesji w procentach

  4. Zagnieżdżone pętle PL/SQL z kursorami

  5. Jak dodać zapytanie czasowe w Oracle?