Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Ganti bagian bidang dengan nilai dari kueri

Mungkin bukan yang paling efisien, tetapi bekerja secara rekursif (yaitu, jika crit_description itu sendiri berisi "placeholder", itu juga diperluas. (Solusi pertama, lebih sederhana dari apa yang ditunjukkan di bawah, tidak melakukan langkah rekursif ini.) Lihat input sampel ketiga yang saya tambahkan. Saya akan memposting lagi nanti jika saya bisa membersihkannya lagi.

CATATAN:Ini mengasumsikan semua "placeholder" benar-benar ditemukan di criteria_info meja; Saya tidak menguji apa yang terjadi jika mereka tidak ditemukan. OP untuk menyatakan persyaratan.

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. SQL Server setara dengan TO_CHAR dan konversi format

  2. Nomor tidak valid dalam Oracle SQL Case

  3. Cara menggunakan Fungsi Oracle LISTAGG

  4. Jalankan Oracle Forms sebagai standalone tanpa browser

  5. Buat kunci utama unik (hash) dari kolom database