6 joulukuun, 2021

Oraclen Aikavyöhyke

Just when you thought you know where you are, Oracle on toteuttanut aikavyöhykkeitä, joilla meidät on kokonaan rajattu pois. Tulkaa, niin mietitään missä olemme tällä hienolla planeetalla.

muutama artikkeli takaisin kirjoitin vertailusta päivämäärän datatyypin ja aikaleiman datatyypin välillä. Tämä artikkeli menee askeleen pidemmälle ja tutkii Oraclen aikavyöhyke ominaisuus aikaleima datatype. Erityisesti Oracle on lisännyt aikaleiman datatyyppiin ”aikavyöhykkeellä” ja ”paikallisella aikavyöhykkeellä”.

voimassa olevat aikavyöhykkeet

sinulla on kaksi vaihtoehtoa, kun asetat mille aikavyöhykkeelle tietokanta kuuluu. Voit joko määritellä sen siirtymäksi GMT/UTC: stä muodossa ”hh: mm” tai voit määrittää sen nimellä, jolla on merkintä V$: n AIKAVYÖHYKETAULUKOSSA. Listaus 1 näyttää SQL I käytetään näyttämään voimassa aikavyöhykkeen nimi Mountain Standard Aikavyöhyke.

listaus 1
Näytä voimassa olevat aikavyöhykkeiden nimet MST: lle

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

DBTIMETSONI

aikavyöhykkeiden ytimessä on tietokannan aikavyöhyke. Voit tarkastella aikavyöhykettä, joka on valittu tietokannan luomisessa antamalla SQL Listing 2. Jos haluat muuttaa DBTIMEZONE sinun täytyy antaa ALTER DATBASE komento, kuten Listing 3. Jotta Uusi DBTIMEZONE tulee voimaan, sinun täytyy pomppia tietokantaan. Lisäksi, jos sinulla on tietotyyppi sarakkeita, jotka ovat aikaleima aikavyöhyke määritelty, et voi nollata DBTIMEZONE. Kun terhakka tietokantaan, voit antaa SQL Listing 4 vahvistaa, että muutos on tapahtunut. Jos haluat vaihtaa takaisin ” hh:mm ” Muoto DBTIMEZONE, vain antaa SQL Listing 5.

listaus 2
Tarkista tietokannan aikavyöhyke

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

listaus 3
tietokannan aikavyöhykkeen muuttaminen

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

luettelo 4
validoi dbtimetsonin muutos

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

listaus 5
Vaihda DBTIMETSONI takaisin hh: mm-muotoon

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

ISTUNTOAIKAVYÖHYKE

jos et halua käyttää tietokannan aikavyöhykettä, Oracle antaa sinulle mahdollisuuden asettaa aikavyöhyke istuntotasolle. Anna SQL listauksessa 6, Jos haluat eri aikavyöhykkeen nykyiselle istunnolle, johon olet yhteydessä. Voit tarkistaa istunnon aikavyöhykkeen antamalla SQL luettelossa 7.

listaus 6
Aseta aikavyöhyke sessiotasolla

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

listaus 7
Tarkista istuntotason aikavyöhyke

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

SYSTIMESTAMP

aivan kuten SYSDATELLE soitetaan nykyisen järjestelmän päivämäärän ja kellonajan saamiseksi, on puhelu nykyisen järjestelmän päivämäärän, ajan ja aikavyöhykkeen saamiseksi. Palautettu tietotyyppi on aikaleima aikavyöhykkeellä. Antaa SQL Listing 8 saada nykyisen järjestelmän aikatietoja.

listaus 8
Hae järjestelmän aikaleima aikavyöhyketiedoilla

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

CURRENT_TIMESTAMP

SYYSTIMESTAMP-funktion laskuri-osa istunnon nykyiselle päivälle ja kellonajalle on CURRENT_TIMESTAMP-funktiokutsu. Tämä palauttaa sen, mikä istunnon nykyinen aikaleima on suhteessa istunnon aikavyöhykkeeseen (ISTUNTOAIKAVYÖHYKE). Siksi, jos meillä on istunnon aikavyöhyke määriteltynä listauksessa 6, voimme tarkistaa istunnon aikaleiman antamalla SQL listauksessa 9.

listaus 9
paikallinen aikaleima istuntoon

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

aikaleima datatyyppi aikavyöhyketietojen kanssa

aikavyöhyketietojen tallentamisen ytimessä Oracle on määritellyt aikaleima-tietotyypin. Tämä on Oraclen suuri Uusi toivo antaa vanhalle DATATYYPILLE rakeisempi mekanismi pitää paitsi päivämäärä-ja aikatietoja myös murto-osia. Katso Vertailu Oraclen päivämäärä ja aikaleima tietotyypit keskustelua tästä tietokantatyyppi. Tämän artikkelin loppuosaa varten ja aikaleiman datatyypin aikavyöhykevaihtoehtojen hyödyntämiseksi olen luonut taulukon, joka on määritelty taulukossa 1. Listauksessa 10, Olen luonut nopean esimerkin siitä, miten aikaleima aikavyöhykkeellä ja aikaleima paikallisella aikavyöhykkeellä tietotyypit käyttäytyvät, kun niitä käytetään tietojen tallentamiseen. Aluksi olen asettanut DBTIMEZONE ja istunnon aikavyöhyke on sama arvo ’-07: 00’. Sitten lisätä DATE_TABLE arvo järjestelmän aikaleima. Sitten muutan aikavyöhykettä nykyisen istunnon vain olla ’-03: 00’. Tämä asettaa nykyisen istunnon neljä tuntia ennen tietokannan aikavyöhykettä. Sitten lisätä DATE_TABLE rivi, joka pitää nykyisen istunnon aikaleima. Pääidea ymmärtää tässä on, että sarake datatype aikaleima aikavyöhykkeellä tallentaa ja näyttää nimenomainen aika toimitetaan lisää lauseke. Sarake, jossa on datatype aikaleima paikallisella aikavyöhykkeellä, tallentaa annetun nimenomaisen ajan, mutta näyttää arvon, joka on suhteessa nykyiseen istunnon aikavyöhykkeeseen. Tämä tarkoittaa, että jos haluat kovia ja nopeita aikaleimoja aikavyöhyketiedoilla tallennettuna, sinun tulisi käyttää aikaleimaa AIKAVYÖHYKETYYPILLÄ. Jos olet huolissaan enemmän antaa Päivämäärä ja aika tietoa asiakkaille eri aikavyöhykkeillä ja edustettuna heidän paikallista aikaa, sinun pitäisi käyttää aikaleimaa paikallisen aikavyöhykkeen datatype.

Taulukko 1:

Luo taulukko, jossa on erilaisia AIKALEIMASARAKKEITA

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

listaus 10
SYSTIMESTAMPIN lisääminen DATE_TABLEEN

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

olemme kaikki kasvaneet ja hyväksyneet aikavyöhykkeet. On aina ollut helppoa tehdä tunnin ero päässä, kun soittaa jollekin tai matkustaa toiselle aikavyöhykkeelle. Jostain syystä täytäntöönpano aikavyöhykkeiden kautta siirtymät GMT / UTC vaikeutti minua käsitteellistää ja selvittää, missä ja mihin aikaan se todella on. Ehdottaisin, että leikittelisit antamallani esimerkillä, jotta tutustuisit tähän ominaisuuteen ja siihen, missä ihmeessä olet.

” Katso kaikki kolumnisti James Koopmannin Artikkelit

Vastaa

Sähköpostiosoitettasi ei julkaista.