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

ऑरैकल में एक बार निष्पादित करने के लिए आप किसी फ़ंक्शन को जहां क्लॉज में कैसे बाध्य कर सकते हैं?

आप इसके लिए पीएल/एसक्यूएल का उपयोग क्यों कर रहे हैं? आपने जो कहा है उससे आप कुछ गणित कर रहे हैं, एसक्यूएल में ऐसा क्यों न करें? यह INSTR और SUBSTR के संयोजन के साथ भी संभव होगा लेकिन REGEXP_SUBSTR के साथ देखना बेहतर है।

select to_number(regexp_substr(ip, '[^.]+', 1, 1)) * power(2,24)
        + to_number(regexp_substr(ip, '[^.]+', 1, 2)) * power(2,16)
        + to_number(regexp_substr(ip, '[^.]+', 1, 3)) * power(2,8)
        + to_number(regexp_substr(ip, '[^.]+', 1, 4))
     , icb.*
     , icl.* 
  from ip_city_block icb
  join ip_city_location icl
    on icl.locid = icb.locid  
 where to_number(regexp_substr(ip, '[^.]+', 1, 1)) * power(2,24)
        + to_number(regexp_substr(ip, '[^.]+', 1, 2)) * power(2,16)
        + to_number(regexp_substr(ip, '[^.]+', 1, 3)) * power(2,8)
        + to_number(regexp_substr(ip, '[^.]+', 1, 4))
       between icb.startipnum and icb.endipnum

REGEXP_SUBSTR आउटपुट का SQL Fiddle प्रदर्शन

अगर आपके पास है PL/SQL में ऐसा करने के लिए आपको दो काम करने चाहिए:

  1. देखें कि क्या आप अपने फ़ंक्शन को के रूप में घोषित कर सकते हैं। नियतात्मक
  2. कोशिश करें और sub का लाभ उठाएं -क्वेरी कैशिंग

ऐसा प्रतीत होता है कि आप पहले से ही 2 कर रहे हैं, लेकिन आप WITH क्लॉज का उपयोग करके इसे आजमा सकते हैं और बढ़ा सकते हैं:

with the_ip as ( select get_ip_integer('74.253.103.98') as ip from dual )
select the_ip.ip
     , icb.*
     , icl.* 
  from ip_city_block icb
  join ip_city_location icl
    on icl.locid = icb.locid
  join the_ip
    on the_ip.ip between icb.startipnum and icb.endipnum


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाबेस उपयोगकर्ता और तालिका की सामग्री के आधार पर पंक्तियों को कैसे वापस करें?

  2. जहां स्थिति pl/sql . के लिए एक सरणी के माध्यम से लूपिंग

  3. रिकॉर्ड के अनुसार आइटम बहिष्कृत करें

  4. Oracle में 10 मिनट के भीतर 10 मिलियन प्रश्नों का INSERT?

  5. विभाजन के भीतर गैर-शून्य मानों को ऊपर ले जाएं