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

मेरे पास प्रोग्राम है जिसे मैं तुलना करना चाहता हूं तिथियां लाएं और वांछित डेटा लाएं

यह बाहरी जुड़ाव होना चाहिए था; कुछ इस तरह:

SQL> declare
  2    descr      varchar2(90);
  3    gz_dt      date;
  4    date1      date :=to_date('2021-01-01','YYYY-MM-DD');
  5    date2      date :=to_date('2021-01-31','YYYY-MM-DD');
  6    vatt_date  date;
  7    vempcode   number;
  8    cursor c_gzdt is
  9      select g.gazzeted_date, g.description, p.att_date, p.emp_code
 10      from pay_in_out p left join gazzeted_days g
 11         on p.att_date = g.gazzeted_date
 12        and gazzeted_date between date1 and date2
 13        and p.emp_code=111
 14      order by p.att_date;
 15  begin
 16    open c_gzdt;
 17    loop
 18      fetch c_gzdt into gz_dt, descr, vatt_date, vempcode ;
 19      exit when c_gzdt%notfound;
 20
 21      if vatt_date = gz_dt then
 22         dbms_output.put_line(vatt_date||' THE DAY OF : '||descr);
 23      else
 24         dbms_output.put_line(vatt_date||' THE DAY OF : '||'PRESENT');
 25      end if;
 26
 27    end loop;
 28    close c_gzdt;
 29  end;
 30  /

जिसके परिणामस्वरूप

01.01.21 THE DAY OF : PRESENT
02.01.21 THE DAY OF : PRESENT
03.01.21 THE DAY OF : PRESENT
04.01.21 THE DAY OF : PRESENT
05.01.21 THE DAY OF : PRESENT
06.01.21 THE DAY OF : PRESENT
07.01.21 THE DAY OF : PRESENT
08.01.21 THE DAY OF : PRESENT
09.01.21 THE DAY OF : Its Holyday two
10.01.21 THE DAY OF : PRESENT
11.01.21 THE DAY OF : PRESENT
12.01.21 THE DAY OF : PRESENT
13.01.21 THE DAY OF : Its Holyday three
14.01.21 THE DAY OF : PRESENT
15.01.21 THE DAY OF : PRESENT
16.01.21 THE DAY OF : Its Holyday four
17.01.21 THE DAY OF : PRESENT
18.01.21 THE DAY OF : PRESENT
19.01.21 THE DAY OF : PRESENT
20.01.21 THE DAY OF : PRESENT
21.01.21 THE DAY OF : Its Holyday five
22.01.21 THE DAY OF : PRESENT
23.01.21 THE DAY OF : PRESENT
24.01.21 THE DAY OF : PRESENT
25.01.21 THE DAY OF : PRESENT
26.01.21 THE DAY OF : Its Holyday six
27.01.21 THE DAY OF : PRESENT
28.01.21 THE DAY OF : PRESENT
29.01.21 THE DAY OF : PRESENT
30.01.21 THE DAY OF : PRESENT
31.01.21 THE DAY OF : PRESENT

PL/SQL procedure successfully completed.

SQL>

Oracle रिपोर्ट्स . के अनुसार मुद्दा:पीएल/एसक्यूएल को पूरी तरह से छोड़ दें और रिपोर्ट की क्वेरी के रूप में थोड़ा संशोधित कर्सर क्वेरी का उपयोग करें। पंक्ति #8 में आप अभी भी पैरामीटर का उपयोग करेंगे, जो संभवत:रिपोर्ट के उपयोगकर्ता पैरामीटर . के अंतर्गत बनाए गए हैं ऑब्जेक्ट नेविगेटर के भीतर। रिपोर्ट, मुझे लगता है, उनके मूल्यों को कहीं और से प्राप्त करें (जैसे ओरेकल फॉर्म या एपेक्स या ...) वही ID . के लिए जाता है , मेरा मानना ​​है - आप वास्तव में 111 . को हार्डकोड नहीं करना चाहते हैं , क्या आप?

SQL> select p.att_date     ||
  2       ' THE DAY OF : ' ||
  3         case when p.att_date = g.gazzeted_date then g.description
  4              else 'PRESENT'
  5         end result
  6  from pay_in_out p left join gazzeted_days g
  7     on p.att_date = g.gazzeted_date
  8    and gazzeted_date between date '2021-01-01' and date '2021-01-31'
  9    and p.emp_code = 111
 10  order by p.att_date;

RESULT
--------------------------------------------------------------
01.01.21 THE DAY OF : PRESENT
02.01.21 THE DAY OF : PRESENT
03.01.21 THE DAY OF : PRESENT
04.01.21 THE DAY OF : PRESENT
05.01.21 THE DAY OF : PRESENT
06.01.21 THE DAY OF : PRESENT
07.01.21 THE DAY OF : PRESENT
08.01.21 THE DAY OF : PRESENT
09.01.21 THE DAY OF : Its Holyday two
10.01.21 THE DAY OF : PRESENT
<snip>

[रिपोर्ट में बाहरी जुड़ाव]

आह, हाँ ... रिपोर्ट्स में, आपको "पुराने" Oracle के बाहरी जुड़ाव का उपयोग करना होगा (+) ऑपरेटर। वही case . के लिए जाता है - decode का उपयोग करें इसके बजाय:

select p.att_date     ||
     ' THE DAY OF : ' || 
       decode(p.att_date, g.gazzeted_date, g.description, 'PRESENT') result
from pay_in_out p, gazzeted_days g 
where p.att_date = g.gazzeted_date (+)
  and g.gazzeted_date (+) between date '2021-01-01' and date '2021-01-31'
  and p.emp_code = 111
order by p.att_date;  



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle डेटाबेस में पैरामीटर्स के साथ PL/SQL संग्रहीत कार्यविधियाँ कैसे बनाएँ?

  2. WebLogic सर्वर को मौजूदा ग्रहण में कैसे कॉन्फ़िगर करें

  3. Sqlplus oracle:मैं 1 लाइन में बैश पर sql कमांड कैसे चला सकता हूं?

  4. कर्सर का उपयोग करके विभाग के नाम प्रदर्शित करें। कर्सर का उपयोग करके विभाग तालिका से सभी विभाग के नाम प्रदर्शित करने के लिए पीएल/एसक्यूएल ब्लॉक बनाएं

  5. Oracle 11g में आप दो तिथियों के बीच प्रति घंटा वजन औसत डेटा कैसे करते हैं?