december 6, 2021

Oracle Tijdzone

net toen u dacht te weten waar u was, heeft Oracle tijdzones geïmplementeerd om ons volledig uit te sluiten. Kom mee en laten we uitzoeken waar we zijn op deze geweldige planeet.

een paar artikelen terug schreef ik over een vergelijking tussen de datum datatype en de tijdstempel datatype. Dit artikel gaat een stap verder en verkent Oracle ‘ s tijdzone functie van de tijdstempel datatype. In het bijzonder heeft Oracle de “met tijdzone” en de “met lokale tijdzone” toegevoegd aan het tijdstempel datatype.

geldige tijdzones

u hebt twee opties bij het instellen van de tijdzone waartoe de database behoort. U kunt het kwalificeren als een verplaatsing uit GMT/UTC in het formaat ‘hh:mm’ of u kunt het opgeven als een naam die een vermelding heeft in de V$TIMEZONE tabel. Lijst 1 toont de SQL die ik gebruikte om de geldige Tijdzone naam weer te geven in de Mountain standaard tijdzone.

Lijst 1
geldige tijdzonen voor MST tonen

SQL> select tzname,tzabbrev from V$TIMEZONE_NAMES where tzabbrev = 'MST'TZNAME TZABBREV------------------------- ----------America/Denver MSTAmerica/Edmonton MSTAmerica/Ensenada MSTAmerica/Mazatlan MSTAmerica/Mexico_City MSTAmerica/Phoenix MSTAmerica/Regina MSTAmerica/Shiprock MSTAmerica/Tijuana MSTCanada/East-Saskatchewan MSTCanada/Mountain MSTCanada/Saskatchewan MSTEurope/Moscow MSTMexico/BajaNorte MSTMexico/BajaSur MSTMexico/General MSTMST MSTMST7MDT MSTNavajo MSTUS/Arizona MSTUS/Mountain MSTW-SU MST

DBTIMEZONE

de kern van tijdzones is de tijdzone van de database. U kunt kijken naar de tijdzone die is geselecteerd bij database creatie door het uitgeven van de SQL in lijst 2. Als je de DBTIMEZONE wilt wijzigen moet je een ALTER DATBASE commando geven zoals in Listing 3. Om de nieuwe DBTIMEZONE in werking te laten treden, moet u de database stuiteren. Bovendien, als u gegevens type kolommen die zijn van de tijdstempel met Tijdzone gedefinieerd, zult u niet in staat zijn om de dbtimezone te resetten. Na het stuiteren van de database, kunt u de SQL uitgeven in Listing 4 om te valideren dat de wijziging heeft plaatsgevonden. Als je terug wilt schakelen naar de ” hh:mm ” formaat voor DBTIMEZONE, geef gewoon de SQL in lijst 5.

Lijst 2
tijdzone van de database controleren

SQL> select DBTIMEZONE from dual;DBTIME-------07:00

3
tijdzone van de database wijzigen

SQL> ALTER database SET TIME_ZONE = 'America/Denver';Database altered.

lijst 4
de wijziging in DBTIMEZONE valideren

SQL> select DBTIMEZONE from dual;DBTIMEZONE---------------America/Denver

lijst 5
DBTIMEZONE terugschakelen naar UU: mm-formaat

SQL> ALTER database SET TIME_ZONE = '-07:00';

SESSIONTIMEZONE

Als u de tijdzone van de database niet wilt gebruiken, geeft Oracle u de optie om de tijdzone op sessieniveau in te stellen. Geef de SQL in lijst 6 als u een andere tijdzone wilt voor de huidige sessie waarmee u bent verbonden. U kunt de sessie Tijdzone controleren door de afgifte van de SQL In Lijst 7.

Listing 6
tijdzone instellen op sessieniveau

SQL> alter session set TIME_ZONE='-03:00';Session altered.

Lijst 7
Tijdzone op sessieniveau controleren

SQL> select SESSIONTIMEZONE from dual;SESSIONTIMEZONE--------------------------------------------------03:00

SYSTIMESTAMP

net zoals er een aanroep is naar SYSDATE om de huidige systeemdatum en-tijd te verkrijgen, is er een aanroep om de huidige systeemdatum, – tijd en-tijdzone te verkrijgen. Het gegevenstype dat wordt geretourneerd is van tijdstempel met Tijdzone. Geef de SQL in lijst 8 om de huidige systeem tijd informatie te krijgen.

Listing 8
huidige systeem tijdstempel met Tijdzone-informatie ophalen

SQL> select SYSTIMESTAMP from dual;SYSTIMESTAMP-----------------------------------------------01-SEP-03 10.53.13.574000 AM -07:00

CURRENT_TIMESTAMP

het teller deel van de SYSTIMESTAMP functie voor sessie huidige datum en tijd is de current_timestamp functie aanroep. Dit retourneert wat de huidige tijdstempel van de sessie is in relatie tot de sessie Tijdzone (SESSIONTIMEZONE). Daarom, als we de sessie Tijdzone hebben zoals gedefinieerd in lijst 6, kunnen we de tijdstempel van de sessie controleren door de SQL uit te geven in lijst 9.

lijst 9
lokale tijdstempel voor sessie

SQL> select CURRENT_TIMESTAMP from dual;CURRENT_TIMESTAMP-------------------------------------------------01-SEP-03 02.53.33.753000 PM 03:00

tijdstempel datatype met Tijdzone-informatie

in het hart van het opslaan van Tijdzone-informatie binnen een tabel heeft Oracle het tijdstempelgegevenstype gedefinieerd. Dit is Oracle ‘ s grote nieuwe hoop voor het geven van de oude datum datatype een meer korrelig mechanisme van het houden van niet alleen datum en tijd informatie, maar ook fractionele seconden. Bekijk een vergelijking van Oracle ‘ s datum en tijdstempel Datatypes voor een bespreking van dit databtype. Voor de rest van dit artikel en met het oog op het benutten van de tijdzone opties voor het tijdstempel datatype, heb ik een tabel gemaakt zoals gedefinieerd in Tabel 1. In Lijst 10 heb ik een snel Voorbeeld gemaakt van hoe de tijdstempel met tijdzone en tijdstempel met lokale tijdzone datatypes zich gedragen wanneer ze worden gebruikt om informatie op te slaan. Om te beginnen heb ik de DBTIMEZONE en sessie tijdzone ingesteld op dezelfde waarde ‘-07:00’. Ik voeg dan in de DATE_TABLE de waarde van een systeem tijdstempel. Ik verander dan de tijdzone voor de huidige sessie alleen ‘-03: 00’. Hiermee wordt de huidige sessie vier uur voor de tijdzone van de database ingesteld. Ik voeg vervolgens in de DATE_TABLE een rij in die de huidige sessie-tijdstempel bevat. Het belangrijkste idee om hier te begrijpen is dat de kolom met datatype tijdstempel met Tijdzone de expliciete tijd opslaat en weergeeft die wordt geleverd door het INSERT statement. De kolom met datatype-tijdstempel met lokale tijdzone slaat de opgegeven expliciete tijd op, maar geeft een waarde weer die relatief is aan de huidige sessie-Tijdzone. Dit betekent dat als u harde en snelle tijdstempels met tijdzonegegevens wilt opslaan, U de tijdstempel met TIJDZONEDATATYPE moet gebruiken. Als u meer bezig bent met het geven van datum en tijd informatie aan klanten in verschillende tijdzones en vertegenwoordigd in hun lokale tijd, moet u de tijdstempel met lokale tijdzone datatype gebruiken.

Tabel 1:

Maak een tabel met verschillende TIJDSTEMPELKOLOMMEN

create table date_table ( time_stamp_tz TIMESTAMP WITH TIME ZONE, time_stamp_ltz TIMESTAMP WITH LOCAL TIME ZONE);

lijst 10
invoegen van SYSTIMESTAMP in DATE_TABEL

SQL> select dbtimezone,sessiontimezone from dual;DBTIMEZONE SESSIONTIMEZONE---------- -----------------07:00 -07:00SQL> insert into date_table values (SYSTIMESTAMP,SYSTIMESTAMP);1 row created.SQL> alter session set time_zone='-03:00';Session altered. SQL> select dbtimezone,sessiontimezone from dual;DBTIMEZONE SESSIONTIMEZONE---------- -----------------07:00 -03:00SQL> insert into date_table values (LOCALTIMESTAMP,LOCALTIMESTAMP );1 row created.SQL> select time_stamp_tz, time_stamp_ltz from date_table;TIME_STAMP_TZ TIME_STAMP_LTZ------------------------------------- ------------------------------01-SEP-03 10.57.36.642000 AM -07:00 01-SEP-03 02.57.36.642000 PM01-SEP-03 02.57.48.549000 PM -03:00 01-SEP-03 02.57.48.549000 PMSQL> alter session set time_zone='-07:00';Session altered.SQL> select time_stamp_tz, time_stamp_ltz from date_table;TIME_STAMP_TZ TIME_STAMP_LTZ------------------------------------- ------------------------------01-SEP-03 10.57.36.642000 AM -07:00 01-SEP-0310.57.36.642000 AM01-SEP-03 02.57.48.549000 PM -03:00 01-SEP-0310.57.48.549000 AM

we zijn allemaal opgegroeid en hebben tijdzones geaccepteerd. Het is altijd gemakkelijk geweest om het uurverschil in ons hoofd te doen wanneer we iemand bellen of naar een andere tijdzone reizen. Om de een of andere reden maakte de implementatie van tijdzones door middel van offsets van de GMT/UTC het moeilijk voor mij om te conceptualiseren en erachter te komen waar en hoe laat het echt is. Ik stel voor dat jullie spelen met het voorbeeld dat ik jullie heb gegeven zodat jullie kennis kunnen maken met deze eigenschap en waar jullie op aarde zijn.

” Zie alle artikelen van Columnist James Koopmann

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.