Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Thay thế một phần của trường bằng các giá trị từ truy vấn

Có lẽ không phải là hiệu quả nhất, nhưng nó hoạt động đệ quy (nghĩa là, nếu crit_description bản thân nó chứa "trình giữ chỗ", chúng cũng được mở rộng. (Một giải pháp đầu tiên, đơn giản hơn những gì được hiển thị bên dưới, đã không thực hiện bước đệ quy này.) Xem đầu vào mẫu thứ ba mà tôi đã thêm. Tôi sẽ đăng lại sau nếu có thể dọn dẹp thêm.

LƯU Ý:Điều này giả định rằng tất cả "trình giữ chỗ" thực sự được tìm thấy trong criteria_info bàn; Tôi đã không kiểm tra những gì sẽ xảy ra nếu chúng không được tìm thấy. OP để nêu yêu cầu.

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. Kiểu dữ liệu Oracle JDBC và Oracle CHAR

  2. Làm cách nào để ngăn kết nối tự động định kỳ với cơ sở dữ liệu Oracle?

  3. RR so với YY trong Oracle

  4. Thủ tục Oracle

  5. ORA-00933:Lệnh SQL không được kết thúc đúng cách khi sử dụng pivot