Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

फ़ील्ड के हिस्से को क्वेरी के मानों से बदलें

शायद सबसे कुशल नहीं है, लेकिन यह पुनरावर्ती रूप से काम करता है (अर्थात, यदि crit_description स्वयं में "प्लेसहोल्डर" होते हैं, जिनका विस्तार भी किया जाता है। (एक पहला समाधान, जो नीचे दिखाया गया है उससे सरल, यह पुनरावर्ती चरण नहीं किया।) तीसरा नमूना इनपुट देखें जो मैंने जोड़ा। मैं बाद में फिर से पोस्ट करूंगा अगर मैं इसे कुछ और साफ कर सकता हूं।

नोट:यह मानता है कि सभी "प्लेसहोल्डर" वास्तव में criteria_info . में पाए जाते हैं मेज़; मैंने परीक्षण नहीं किया कि अगर वे नहीं मिले तो क्या होगा। आवश्यकता बताने के लिए ओपी।

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. sqlplus/Oracle में युग को आज तक बदलें

  2. HEXTORAW () Oracle में फ़ंक्शन

  3. खंड में Oracle अमान्य संख्या

  4. SQL त्रुटि:ORA-02291:अखंडता बाधा

  5. java.sql.SQLException:ORA-01652:टेबलस्पेस TEMP में अस्थायी खंड को 128 तक बढ़ाने में असमर्थ (विस्तार करने के बाद भी)