Oracle डेटाबेस में, समय क्षेत्र विभिन्न स्थानों पर सेट किए जा सकते हैं। Oracle का उपयोग करते समय समय क्षेत्र बदलने के चार तरीके नीचे दिए गए हैं।
डेटाबेस समय क्षेत्र सेट करें
डेटाबेस बनाते समय आप डेटाबेस टाइम ज़ोन सेट कर सकते हैं। ऐसा करने के लिए, SET TIME_ZONE
. का उपयोग करें CREATE DATABASE
का खंड बयान।
उदाहरण:
CREATE DATABASE mySampleDb
...
SET TIME_ZONE='Australia/Sydney';
इस मामले में, मैंने एक समय क्षेत्र क्षेत्र का नाम इस्तेमाल किया। अपने सिस्टम पर मान्य क्षेत्र नामों की पूरी सूची प्राप्त करने के लिए Oracle डेटाबेस में मान्य समय क्षेत्रों की सूची कैसे लौटाएं देखें।
वैकल्पिक रूप से, आप वास्तविक समय क्षेत्र ऑफ़सेट का उपयोग कर सकते हैं:
CREATE DATABASE mySampleDb
...
SET TIME_ZONE='+10:00';
यदि आप डेटाबेस बनाते समय स्पष्ट रूप से समय क्षेत्र निर्धारित नहीं करते हैं, तो यह सर्वर के ऑपरेटिंग सिस्टम के समय क्षेत्र के लिए डिफ़ॉल्ट है।
आप डेटाबेस के लिए वर्तमान समय क्षेत्र सेटिंग भी बदल सकते हैं। ऐसा करने के लिए, ALTER DATABASE
. का उपयोग करें बयान।
उदाहरण:
ALTER DATABASE mySampleDb
...
SET TIME_ZONE='Australia/Sydney';
ध्यान दें कि डेटाबेस समय क्षेत्र केवल TIMESTAMP WITH LOCAL TIME ZONE
के लिए प्रासंगिक है स्तंभ। साथ ही, Oracle अनुशंसा करता है कि आप डेटा रूपांतरण से बचने और डेटाबेस के बीच डेटा स्थानांतरित होने पर प्रदर्शन में सुधार करने के लिए डेटाबेस समय क्षेत्र को UTC (0:00) पर सेट करें।
सत्र का समय क्षेत्र सेट करें
आप सत्र समय क्षेत्र को स्वतंत्र रूप से डेटाबेस समय क्षेत्र में सेट कर सकते हैं। जब आप TIMESTAMP WITH LOCAL TIME ZONE
लौटाते हैं डेटा, यह वर्तमान सत्र के समय क्षेत्र में वापस आ गया है।
सत्र समय क्षेत्र तब भी प्रभावी होता है जब एक TIMESTAMP
मान को TIMESTAMP WITH TIME ZONE
. में बदल दिया जाता है या TIMESTAMP WITH LOCAL TIME ZONE
डेटा प्रकार।
सत्र स्तर पर समय क्षेत्र निर्धारित करने के लिए आप कुछ चीजें कर सकते हैं।
Tवह ORA_SDTZ
पर्यावरण चर
आप सत्र का समय क्षेत्र ORA_SDTZ
. के साथ सेट कर सकते हैं पर्यावरणपरिवर्ती तारक। इसे निम्न मानों पर सेट किया जा सकता है:
- ऑपरेटिंग सिस्टम स्थानीय समय क्षेत्र (
'OS_TZ'
) - डेटाबेस समय क्षेत्र (
'DB_TZ'
) - यूटीसी से पूर्ण ऑफसेट (उदा.
'-04:00'
) - समय क्षेत्र क्षेत्र का नाम (उदा.
'America/St_Kitts'
)
इस पर्यावरण चर को UNIX परिवेश में सेट करने के कुछ उदाहरण यहां दिए गए हैं:
% setenv ORA_SDTZ 'OS_TZ'
% setenv ORA_SDTZ 'DB_TZ'
% setenv ORA_SDTZ 'America/St_Kitts'
% setenv ORA_SDTZ '-04:00'
ORA_SDTZ
. का डिफ़ॉल्ट मान चर है 'OD_TZ'
. इस मान का उपयोग तब किया जाता है जब चर सेट नहीं होता है या इसे अमान्य मान पर सेट किया जाता है।
ALTER SESSION
कथन
आप SET TIME_ZONE
. के साथ किसी विशिष्ट SQL सत्र के लिए समय क्षेत्र बदल सकते हैं ALTER SESSION
. का खंड बयान।
TIME_ZONE
निम्न मानों पर सेट किया जा सकता है:
- सत्र शुरू होने पर डिफ़ॉल्ट स्थानीय समय क्षेत्र (
local
) - डेटाबेस समय क्षेत्र (
dbtimezone
) - यूटीसी से पूर्ण ऑफसेट (उदा.
'-04:00'
) - समय क्षेत्र क्षेत्र का नाम (उदा.
'Canada/Eastern'
)
यहां TIME_ZONE
सेट करने का एक उदाहरण दिया गया है ऐसे मूल्यों के लिए:
ALTER SESSION SET TIME_ZONE=local;
ALTER SESSION SET TIME_ZONE=dbtimezone;
ALTER SESSION SET TIME_ZONE='Canada/Eastern';
ALTER SESSION SET TIME_ZONE='-04:00';
आप SESSIONTIMEZONE
. के साथ अपने वर्तमान सत्र के समय क्षेत्र की जांच कर सकते हैं समारोह।
उदाहरण:
SELECT SESSIONTIMEZONE FROM DUAL;
परिणाम:
Australia/Brisbane
मेरे मामले में, सत्र का समय क्षेत्र ऑस्ट्रेलिया/ब्रिस्बेन पर सेट है।
द AT TIME ZONE
खंड
डेटाटाइम एक्सप्रेशन में AT LOCAL
. शामिल हो सकता है क्लॉज या एक AT TIME ZONE
खंड। अगर आप AT LOCAL
. शामिल करते हैं खंड, फिर परिणाम वर्तमान सत्र समय क्षेत्र में वापस कर दिया जाता है। अगर आप AT TIME ZONE
. शामिल करते हैं खंड, तो समय क्षेत्र निम्न में से एक हो सकता है:
- एक समय क्षेत्र ऑफ़सेट
- एक समय क्षेत्र क्षेत्र का नाम
DBTIMEZONE
(यह फ़ंक्शन डेटाबेस का समय क्षेत्र लौटाता है)SESSIONTIMEZONE
(यह फ़ंक्शन वर्तमान सत्र का समय क्षेत्र लौटाता है)- एक अभिव्यक्ति जो एक वैध समय क्षेत्र प्रारूप के साथ एक वर्ण स्ट्रिंग लौटाती है।
उदाहरण:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
AT TIME ZONE '+12:00'
FROM DUAL;
परिणाम:
02/JAN/30 04:30:35.000000000 AM +12:00
इस मामले में मैंने FROM_TZ()
. का इस्तेमाल किया एक टाइमस्टैम्प मान और एक समय क्षेत्र को TIMESTAMP WITH TIME ZONE
में बदलने के लिए कार्य करता है मूल्य। मैंने तब AT TIME ZONE
. का उपयोग किया था एक अलग समय क्षेत्र निर्दिष्ट करने के लिए खंड।
यहाँ वही उदाहरण है, इस समय को छोड़कर मैं AT LOCAL
specify निर्दिष्ट करता हूँ :
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
AT LOCAL
FROM DUAL;
परिणाम:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE