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

कार्यबल हेडकाउंट की त्रैमासिक गणना की क्षमता

यदि कम से कम effective_start_date पर अनुक्रमणिका है तो यह एक अच्छा संस्करण प्रतीत होता है और effective_end_date per_all_people_f . के क्षेत्र टेबल।

इस क्वेरी के लिए आदर्श प्रकार है

create index x_per_all_people_search on per_all_people_f(   
  effective_start_date,
  effective_end_date, 
  person_id,  
  emp_flag
)

लेकिन इसे बनाए रखना बहुत महंगा हो सकता है (डिस्क लागत, सम्मिलन गति)।

साथ ही, पैकेज बॉडी में कर्सर में सबक्वेरी और पुन:उपयोग फ़ंक्शन कॉल परिणाम होना चाहिए:

cursor cur_var
is 
  select 
    EMP_2012,
    EMP_2013,
    (EMP_2013 - EMP_2012) Diff
  from (
   select 
     function_name('01-MAR-2012','31-MAY-2012') EMP_2012,
     function_name('01-MAR-2013','31-MAY-2013') EMP_2013
   from dual
  );

बेशक सबसे अच्छा समाधान संदर्भ स्विच को कम करना और एकल SQL क्वेरी से सभी मान प्राप्त करना है। साथ ही, आप सीधे कर्सर को पैरामीटर प्रदान कर सकते हैं:

cursor cur_var(
  start_1 date, end_1 date, 
  start_2 date, end_2 date
)
is 
  select 
    EMP_2012,
    EMP_2013,
    (EMP_2013 - EMP_2012) Diff
  from (
   select 
     (
       select 
         count(distinct papf.person_id)
       from 
         per_all_people_f papf
       where 
         papf.emp_flag = 'Y'
         and 
         effective_start_date >= trunc(start_1)
         and 
         effective_end_date   <= trunc(end_1)
     ) EMP_2012,
     (
       select 
         count(distinct papf.person_id)
       from 
         per_all_people_f papf
       where 
         papf.emp_flag = 'Y'
         and 
         effective_start_date >= trunc(start_2)
         and 
         effective_end_date   <= trunc(end_2)
     ) EMP_2013
   from dual
  );

मेरे दृष्टिकोण से फ़ंक्शन/कर्सर पैरामीटर बहुत सामान्य है, एक रैपर बनाने के लिए बेहतर हो सकता है जो इनपुट पैरामीटर तिमाही संख्या और तुलना करने के लिए दो साल लेता है।

और अंत में, यदि परिणाम पीएल/एसक्यूएल में उपयोग करने की योजना बनाते हैं (मुझे लगता है कि एक पंक्ति लौटने के कारण) कर्सर का बिल्कुल भी उपयोग न करें, केवल आउटपुट पैरामीटर के माध्यम से परिकलित मान लौटाएं। दूसरे दृष्टिकोण से यदि आपको एक कर्सर में पूरे वर्ष के लिए तिमाही डेटा प्राप्त करने की आवश्यकता है तो सभी तिमाहियों की गणना करना और एकल क्वेरी में इसकी तुलना करना अधिक कुशल हो सकता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. IO त्रुटि:नेटवर्क एडेप्टर कनेक्शन स्थापित नहीं कर सका - Oracle 11gR2 के साथ। SQL डेवलपर के साथ जुड़ना

  2. मैं Oracle जावा अपडेट तक जल्दी पहुंच कैसे प्राप्त कर सकता हूं, ताकि जब ये अपडेट सार्वजनिक हो जाएं तो मैं अपने आरआईए का परीक्षण कर सकूं और फायर-ड्रिल से बच सकूं?

  3. Oracle में अद्वितीय बनाम विशिष्ट कीवर्ड

  4. मैं क्लाइंट के NLS_LANG की जांच कैसे करूं?

  5. नेस्टेड सरणी और सहयोगी सरणी के बीच क्या अंतर है?