sql - एसक - पल सकल नोट्स इन हिंदी




NEXT_DAY फ़ंक्शन SQL बनाम पीएल/एसक्यूएल में अलग तरीके से काम करता है? (2)

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

https://docs.oracle.com/database/121/SQLRF/functions118.htm#SQLRF00672

पीएल / एसक्यूएल कार्यान्वयन केवल दस्तावेज विनिर्देश के साथ काम करता है - यह सप्ताह के एक दिन को प्रतिनिधित्व करने के लिए एक संख्यात्मक इनपुट को स्वीकार नहीं करता है।

मुझे लगता है कि यह एक अप्रत्यक्ष उत्तर है। मेरा मानना ​​है कि आप गलत सवाल पूछ रहे हैं प्रश्न "पीएल / एसक्यूएल में यह काम क्यों नहीं करता" नहीं होना चाहिए; बल्कि, दस्तावेज़ीकरण दिए जाने पर प्रश्न "ओरेकल एसक्यूएल में क्यों काम करता है" होना चाहिए। केवल ओरेकल इसका जवाब दे सकता है

आपको OTN पर यह चर्चा उपयोगी पायी जा सकती है: https://community.oracle.com/thread/4023654

और शायद यह भी: https://community.oracle.com/ideas/17257?tab=comment

यह SQL क्वेरी क्यों काम करती है:

SELECT NEXT_DAY(SYSDATE, 7)
FROM DUAL;
NEXT_DAY(SYSDATE,7)
-------------------
01-APR-17          
1 row selected.

... लेकिन पीएल / एसक्यूएल का यह गुमनाम ब्लॉक काम नहीं करता है?

DECLARE
  dteExpires DATE;
BEGIN
  dteExpires := NEXT_DAY(SYSDATE, 7);
END;
Error at line 1
ORA-01846: not a valid day of the week
ORA-06512: at line 4

मैं हार्ड कोड को एक दिन के पूर्व अंग्रेजी नाम के दूसरे पैरामीटर नहीं करना चाहता। NEXT_DAY(SYSDATE, 'SATURDAY') या NEXT_DAY(SYSDATE, 'SUNDAY') आदि

अभी के लिए, मैं निम्नलिखित काम का उपयोग करेगा, लेकिन मैं सचमुच जानना NEXT_DAY() कि NEXT_DAY() तुलना में पीएल / NEXT_DAY() में अलग तरह से व्यवहार क्यों करता है

DECLARE
  dteExpires DATE;
BEGIN
  -- 2017-01-01 = SUNDAY
  dteExpires := NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('2017-01-01', 'YYYY-MM-DD'), 'DAY'));
END;

यह मेरा देव पर्यावरण है:

SELECT *
FROM v$version;
BANNER                                                                

-------------------------------------------------------------------------------- 
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
PL/SQL Release 12.1.0.2.0 - Production                 
CORE  12.1.0.2.0  Production                                            
TNS for 64-bit Windows: Version 12.1.0.2.0 - Production               
NLSRTL Version 12.1.0.2.0 - Production                                

5 rows selected.

मुझे लगता है कि मौजूदा सत्र NLS_DATE_LANGUAGE से फ़ंक्शन NEXT_DAY स्वतंत्र बनाने का एकमात्र तरीका आईएसओ सप्ताह के साथ काम करना है जहां सप्ताह के पहले दिन हमेशा सोमवार होता है:

SELECT NEXT_DAY(SYSDATE, TO_CHAR(TRUNC(SYSDATE, 'IW')+5, 'Day')) 
from dual;

TRUNC(SYSDATE, 'IW')+5 अर्थ है "अगले शनिवार"





oracle12c