Czy wiesz, że…

Dzial

Maciej MatysiakAbsolwent Wydziału Elektrycznego Politechniki Poznańskiej. Od 1993 roku jest pracownikiem Instytutu Informatyki Politechniki Poznańskiej. Zainteresowania naukowe obejmują m.in. optymalizację zapytań w systemach baz danych, problemy modelowania danych, inżynierię oprogramowania i narzędzia CASE. Doświadczenia
zawodowe obejmują m.in. projektowanie i budowę dużych systemów informatycznych (kierownik projektu rozproszonego systemu informatycznego dla wyższej uczelni – Dziekanat96) i administrowanie RDBMS Oracle. Od lipca 1997 roku opiekuje się działem dla twórców aplikacji w Oracle’owych PLOUG’tkach. Autor zachęca wszystkich czytelników do zgłaszania swoich problemów napotykanych podczas budowy aplikacji lub choćby do przesyłania uwag dotyczących zawartości działu, który w dużej mierze powinien zależeć od czytelników.

Maciej Matysiak
matys@cs.put.poznan.pl


Czy wiesz, że…

Lekarstwo na 2000

Do roku 2000 pozostały już tylko niecałe trzy lata. Problem funkcjonowania istniejącego oprogramowania na przełomie tysiąclecia, nawet jeśli nie został należycie doceniony, to na pewno został przynajmniej zauważony.Ciekawe jest to, że twórcy nowego oprogramowania, które jest aktualnie implementowane, również borykają się z problemem odpowiedniego skonstruowania systemu, tak aby za trzy lata nie było przykrych niespodzianek. Czy Ty wykonując teraz aplikacje masz świadomość, że będą one działały dłużej niż trzy lata?
Oracle przewidział z pewnym wyprzedzeniem problem roku 2000, oferując twórcom systemów format RR. Można go bez problemu wykorzystać do wprowadzania i wyświetlania dat w obecnie budowanych aplikacjach. Wyprzedzenie to jednak nie było zbyt duże, ponieważ przygotowanie oprogramowania na rok 2000 wykonanego jeszcze za pomocą SQL*Forms 3.0, które nie rozpoznaje formatu RR, wymaga znacznie większych nakładów pracy niż to się z pozoru wydaje.

Format Daty

Format, w którym będzie wprowadzana data do bazy danych, i w którym będzie ona wyświetlana, wynika z przyjętego domyślnego formatu daty. Standardowo Oracle wyświetla daty w formacie DD-MON-YY (np. 30-SIE-97), który można modyfikować za pomocą zlecenia ALTER SESSION lub ustawiając parametr konfiguracyjny NLS_DATE_FROMAT (zmienna środowiskowa lub zmienna w rejestrach). Domyślny format używany jest w przypadkach, gdy sami nie zastosujemy jawnej konwersji daty w określonym przez nas formacie. Jawna konwersja może być wykonana za pomocą funkcji TO_DATE i TO_CHAR lub specyfikując format daty jako jedna z własności pola typu Date w aplikacji. Na przykład jeśli użyjemy formatu DD-MONTH, YYYY będziemy mogli wprowadzić datę wpisując „30 SIERPIEŃ, 1997”, a daty odczytane z bazy danych będą wyświetlane w taki sam sposób.

Problem z YY

Używanie popularnego w swoim czasie w Polsce (kiedy nikt nie wierzył w używanie aplikacji dłużej niż 5 lat) formatu DD.MM.YY powoduje, że na przełomie wieku (nie trzeba wcale przełomu tysiąclecia) oprogramowanie może działać niepoprawnie. Przyczyna problemu polega na tym, że pole daty wykorzystujące YY reprezentuje zawsze dwie ostatnie cyfry roku z aktualnego stulecia. Na przykład, jeśli wpiszemy „30.08.97” to w bazie danych zostanie zapamiętana data 30.08.1997, natomiast jeśli wpiszemy 30.08.00 to pomimo najgorętszych intencji aby wprowadzić datę 30.08.2000, w bazie danych zostanie zapamiętana data 30.08.1900. Pierwsze symptomy takiego zachowania systemu mogą być takie, że pracownicy będą zwalniani z pracy prawie sto lat przed ich zatrudnieniem, że wpisywana data urodzenia będzie sugerowała narodziny człowieka dopiero za kilkadziesiąt lat, itd. W sytuacjach gdy twórcy systemu dorobili zgrubne sprawdzanie poprawności dat w aplikacji lub w bazie danych, posypią się błędy lub niekończące się komunikaty w stylu „Błędna data…”.

Format RR

Lekarstwem Oracle, które może pomóc na „ból głowy” wynikający z przełomu stuleci jest format daty typu RR. Format RR pozwala na wprowadzanie dat z przyszłego stulecia używając obecnie tylko dwóch ostatnich cyfr roku. Ponadto, format RR będzie pozwalał w przyszłym stuleciu wprowadzać daty z aktualnego stulecia, oczywiście również za pomocą dwóch cyfr.

Jeśli użyto formatu RR, na przykład DD-MM-RR, to wiek określany jest na podstawie zakresu dwóch wprowadzonych cyfr według następujących reguł:
  • jeśli 2 ostatnie cyfry bieżącego roku są pomiędzy 0-49 i dwie cyfry konwertowanej daty są pomiędzy 0 i 49, wtedy data jest z aktualnego stulecia,
  • jeśli 2 ostatnie cyfry bieżącego roku są pomiędzy 0-49 i dwie cyfry konwertowanej daty są pomiędzy 50-99, wtedy data należy do poprzedniego stulecia,
  • jeśli 2 ostatnie cyfry bieżącego roku są pomiędzy 50-99 i dwie cyfry konwertowanej daty są pomiędzy 0-49, wtedy data należy do następnego stulecia,
  • jeśli 2 ostatnie cyfry bieżącego roku są pomiędzy 50-99 i dwie cyfry konwertowanej daty są pomiędzy 50-99, wtedy data jest z aktualnego stulecia.

Na przykład, jeśli dzisiaj, tj. w roku 1997, wprowadzimy datę 15.01.45 to zgodnie z powyższymi regułami zachodzi przypadek trzeci i data zostanie ulokowana w przyszłym stuleciu. Jeśli wpiszemy 15.01.60 to zajdzie przypadek czwarty i data zostanie przypisana do aktualnego stulecia. Z tych przykładów widać, że w niektórych sytuacjach, stosowanie formatu RR jest niewystarczające, ponieważ, na przykład, jak wprowadzimy do bazy danych datę urodzin osoby, która ma więcej niż 47 lat? Zatem stosujmy RR, tam gdzie to możliwe, a w pozostałych przypadkach YYYY.

Maciej Matysiak
matys@cs.put.poznan.pl

z tomiku Krzysztofa Pękali

"Awangarda na pniu"

Wiadomo od stuleci
(jak też ten czas leci)
O wiedzy przekazywaniu zaletach
Na naukach, szkoleniach i kompletach.
Jeden dla wielu
Umysł otwiera.
Dla śmiałych celów
Słowa dobiera.
Wielu jednego
Słucha uważnie
A wiedza – co z tego –
Raz trafi, raz nie.

***

Szukanie kompromisów
Nie podlega przepisom.
Szczególnie w procesie
Co komputeryzacją zwie się.
Rzecz dotyczy konwersacji.
Dialogu odmiennych racji.
Człowieka – kobiety
I informatyka – kosmity.
Stanowisko sztywne
Nie podlega grzywnie,
Lecz zmienia w marzenie
Udane wdrożenie.