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

ऑरैकल में वर्तमान दिनांक और समय वापस करने के लिए एक फ़ंक्शन बनाएं

CURRENT_DATE सत्र की तारीख और समय लौटाता है। SYSDATE डेटाबेस की तारीख और समय लौटाता है। ये मान भिन्न हो सकते हैं क्योंकि हम ALTER SESSION . का उपयोग करके अपने सत्र का समय क्षेत्र बदल सकते हैं . आपको शायद SYSDATE . का उपयोग करना चाहिए क्योंकि यह एक सुसंगत मूल्य देता है, हालांकि आपके व्यावसायिक संदर्भ को जाने बिना निश्चित होना कठिन है।

आपके प्रश्न से मुझे संदेह है कि आपको पता नहीं है कि Oracle दिनांक छद्म-स्तंभों में एक समय तत्व शामिल है। इसे आजमाएं:

alter session set nls_date_format='dd-mon-yyyy hh24Lmi:ss'
/
select current_date from dual
/
select sysdate from dual
/

उन छद्म-स्तंभों में से किसी एक को अपने स्वयं के उपयोगकर्ता-परिभाषित फ़ंक्शन में लपेटने का कोई मतलब नहीं है। एक बार जब मैंने गंभीरता से विचार किया कि कुछ स्वचालित इकाई परीक्षणों में समय को इंजेक्ट करना आसान बनाना था। लेकिन मैंने कभी अपने आप को आश्वस्त नहीं किया कि यह सुविधा मानक दृष्टिकोण का उपयोग न करने को उचित ठहराएगी।

संपादित करें

स्वीकृत उत्तर में समाधान काम करता है लेकिन इसमें बहुत अधिक अनावश्यक सामान है। वह सब अतिरिक्त PL/SQL सीधे select sysdate from dual; . की तुलना में 2-3 गुना धीमी गति से चलता है . यह सच है कि निरपेक्ष रूप से ये बहुत छोटे अंतर हैं - मिलीसेकंड, यदि ऐसा है। लेकिन व्यस्त सिस्टम में getSysdate() . पर ढेर सारी कॉल्स के साथ वे सभी मिलीसेकंड समय का एक बड़ा हिस्सा जोड़ सकते हैं। एक बेहतर उपाय यह होगा कि उस सभी कोड को एक सादे return sysdate . से बदल दिया जाए; यह sysdate . को कॉल करने से थोड़ा धीमा है सीधे लेकिन केवल थोड़े से।

dpbradley की टिप्पणी पर विस्तार करते हुए, मैंने एक फ़ंक्शन को खटखटाया है जो हमें परीक्षण के प्रयोजनों के लिए डेटाबेस से एक अलग क्लॉकटाइम को स्थानापन्न करने की अनुमति देता है। मैं डिफ़ॉल्ट संदर्भ में CLIENT_INFO नामस्थान में अपना वैकल्पिक डेटाटाइम संग्रहीत कर रहा हूं; अगर मैं इसे एक उत्पादन प्रणाली में लागू कर रहा होता तो मैं इसके लिए एक समर्पित उपयोगकर्ता परिभाषित संदर्भ तैयार करता।

तो यहाँ getSysdate() के बारे में मेरा विचार है समारोह...

SQL> create or replace function myGetSysdate
  2      ( p_alt_date in varchar2 := null )
  3  return date is
  4  begin
  5      if p_alt_date is null then
  6          return sysdate;
  7      else
  8          return to_date(sys_context('userenv', p_alt_date)
  9                                        , 'dd-mon-yyyy hh24:mi:ss');
 10      end if;
 11  end;
 12  /

Function created.

SQL> 

यहां बताया गया है कि हम वैकल्पिक डेटाटाइम कैसे सेट करते हैं...

SQL> exec dbms_application_info.set_client_info('01-DEC-2010 12:12:12')

PL/SQL procedure successfully completed.

यदि कोई पैरामीटर पारित नहीं किया जाता है तो यह sysdate लौटाता है (डिफ़ॉल्ट और पसंदीदा विकल्प)।

SQL> select getsysdate from dual
  2  /

GETSYSDATE
-----------------
05-JAN-2010 16:25

SQL> 

यदि हम फ़ंक्शन को कॉल करते समय एक संदर्भ नाम स्थान पास करते हैं तो हमें वैकल्पिक डेटाटाइम मिलता है....

SQL> select mygetsysdate('CLIENT_INFO') from dual
  2  /

MYGETSYSDATE('CLI
-----------------
01-DEC-2010 12:12

SQL>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL - विशिष्ट मान सम्मिलित करने वाला कथन ढूँढें

  2. SQLAlchemy में SQL क्वेरीज़ के मुद्रण को सुंदर स्वरूपित कैसे करें?

  3. VB.net में Oracle डेटाटाइम

  4. Oracle डेटाबेस में मान्य समय क्षेत्रों की सूची कैसे लौटाएं?

  5. क्या Oracle में रो/रिकॉर्ड का पता लगाने के लिए ROWID का उपयोग करना सुरक्षित है?