bd2 projekt SprawozdanieAndrzej

Po wygenerowaniu wszystkich danych do naszej tabeli przeszliśmy do następnego kroku który polegał na napisaniu plików sterujących ctl do każdych z osobna tabel.

Poniżej jest pokazana budowa z dowolnie wybranej tabeli:

Zawartość pliku sterującego: miasto.ctl

load data

infile miasto.csv

into table miasto

replace

fields terminated by ';'

(id_miasto,

nazwa_m,

ulica

)

Gdy zostały napisane 10 plików sterujących dla każdej tabeli, mogliśmy przejść do załadowania danych do naszej hurtowni danych.

Żeby można było załadować nasz pliki csv musieliśmy wywołać narzędzie sqlldr. Dokładniej przedstawiam poniżej skrypt który ładuje mi wszystkie pliki csv:

@echo

cd c:\generujemy

sqlldr system/aaa control=miasto.ctl

sqlldr system/aaa control=pracownik.ctl

sqlldr system/aaa control=towar.ctl

sqlldr system/aaa control=kwartal.ctl

sqlldr system/aaa control=dzien.ctl

sqlldr system/aaa control=wojewodztwo.ctl

sqlldr system/aaa control=stacjab.ctl

sqlldr system/aaa control=czas.ctl

sqlldr system/aaa control=dostawca.ctl

sqlldr system/aaa control=stacja_benzynowa.ctl

@ echo

Gdzie (system) oznacza – nazwa użytkownika, a (aaa)oznacza – hasło

Cały ten skrypt jest zapisany w pliku skrypt.bat który można później uruchomić w celu załadowania wszystkich plików csv naraz.

Poniżej przedstawiam cześć obrazka pokazująca uruchomienie tego skryptu

Po zakończonym ładowaniu wszystkich plików w katalogu zostały nam utworzone do każdej z tabel osobno pliki z rozszerzeniem *.log. Z nich możemy wyczytać np. czy wszystkie rekordy zostały wypełnione i czy nie nastąpiły jakieś bledy.

Poniżej przedstawiam przykładowy plik: (miasto.log)

Control File: miasto.ctl

Data File: miasto.csv

Bad File: miasto.bad

Discard File: none specified

(Allow all discards)

Number to load: ALL

Number to skip: 0

Errors allowed: 50

Bind array: 64 rows, maximum of 256000 bytes

Continuation: none specified

Path used: Conventional

Table MIASTO, loaded from every logical record.

Insert option in effect for this table: REPLACE

Column Name Position Len Term Encl Datatype

------------------------------ ---------- ----- ---- ---- ---------------------

ID_MIASTO FIRST * ; CHARACTER

NAZWA_M NEXT * ; CHARACTER

ULICA NEXT * ; CHARACTER

Table MIASTO:

2000 Rows successfully loaded.

0 Rows not loaded due to data errors.

0 Rows not loaded because all WHEN clauses were failed.

0 Rows not loaded because all fields were null.

Space allocated for bind array: 49536 bytes(64 rows)

Read buffer bytes: 1048576

Total logical records skipped: 0

Total logical records read: 2000

Total logical records rejected: 0

Total logical records discarded: 0

Run began on Wt Cze 01 01:28:58 2010

Run ended on Wt Cze 01 01:28:59 2010

Elapsed time was: 00:00:01.03

CPU time was: 00:00:00.04

Kolejnym naszym krokiem było połączenie mechanizmu PSP z naszą hurtownią danych.

Żeby użyć ten mechanizm musieliśmy go umieścić w ogranicznikach <% ....... %> a ograniczniki w kodzie HTML. Następnie zapisać go z rozszerzeniem *.psp i na końcu wywołać procedurę ładującą psp do bazy.

Poniżej przedstawiam procedurę ładowania plików wszystkich naszych plików psp do bazy.

@echo

cd c:\psp

loadpsp -replace -user system/aaa bazy_index.psp

loadpsp -replace -user system/aaa bazy_stacje.psp

loadpsp -replace -user system/aaa bazy_pracownicy.psp

loadpsp -replace -user system/aaa bazy_sprzedaz.psp

loadpsp -replace -user system/aaa bazy_sprzedaz_R.psp

loadpsp -replace -user system/aaa bazy_sprzedaz_M.psp

loadpsp -replace -user system/aaa bazy_inne.psp

loadpsp -replace -user system/aaa bazy_autorzy.psp

loadpsp -replace -user system/aaa bazy_towar.psp

loadpsp -replace -user system/aaa bazy_inne1.psp

loadpsp -replace -user system/aaa bazy_inne2.psp

loadpsp -replace -user system/aaa bazy_inne3.psp

loadpsp -replace -user system/aaa bazy_inne4.psp

loadpsp -replace -user system/aaa bazy_inne5.psp

@echo

Oraz przedstawiam obrazek przedstawiający ładowanie powyższego skryptu:

Żeby nam te pliki zadziałały to musimy jeszcze przed ich wywołaniem odpowiednio skonfigurować środowiska aby móc używać naszej strony w przeglądarce WWW. Do tego celu będzie nam potrzebny deskryptor dostępu do bazy, którego budowę przedstawiam poniżej.

BEGIN

DBMS_EPG.create_dad (

dad_name => 'mydad',

path => '/plsql/*' );

END;

/

Ale również żeby nam ten deskryptor zadziałał musimy również załadować polecenie GRANT XDBADMIN To user; który znajduje się w skrypcie zdbadmin.sql

Poniżej znajduje się obrazek przedstawiający załadowanie plików: xdbadmin.sql oraz deskryptor.sql

Gdy wykonamy wszystkie kroki które omawiane były powyżej, to będziemy mogli wejść w przeglądarkę WWW i tak jak w naszym przypadku wpisać adres url: http://localhost:8080/plsql/system.bazy_index który pokaże nam pierwszą strone startową która została wyświetlona z pliku bazy_index.psp.

Rysunek 1 . Plik znajduje się w procedurze bazy_index.psp

Rysunek 1. Przedstawia naszą stronę główną naszej Hurtowni Danych, gdzie znajduje się informacja ile posiadamy w bazie pracowników o raz ile mamy stacji

Rysunek 2 Procedura znajduje się w pliku bazy_stacje.psp

Rysunek 2. Przedstawia naszą bazę stacji benzynowych. Przedstawione są na niej wszystkie stacje oraz w jakim województwie się znajdują. Dodatkowo możemy wybrać z listy rozwijanej jedno województwo.

Rysunek 3 Procedura znajduje się w pliku bazy_pracownicy.psp

Rysunek 3. W tej tabeli zostały wyświetlona lista wszystkich pracowników których mamy zatrudnionych. Z listy rozwijanej możemy wybrać jedną z naszych stacji żeby zobaczyć ile pracowników pracuje w danej stacji.

Rysunek 4 Procedura znajduje się w pliku bazy_towar.psp.

Rysunek 4. Przedstawia tabele zakupionych towarów od danego dostawcy, jaki to jest towar oraz w jakiej ilości był kupiony. Dodatkowo możemy wybrać z listy rozwijanej rodzaj towaru i nazwę dostawcy.

Rysunek 5 Procedura znajduje się w pliku bazy_sprzedaz.psp

Rysunek 5. Przedstawia nam 2 linki ROK I MIESIĄC.

Rysunek 6 . Procedura znajduje się w pliku bazy_sprzedaz_R.psp

Rysunek 6. Przedstawia nam sprzedaż we wszystkich latach podzielona na kwartały. W tej tabeli wykorzystaliśmy operator CUBE, który stanowi rozszerzenie klauzuli GROUP BY zapytania SELECT. Zapytanie wykorzystujące operator CUBE jest semantycznie równoważne złożeniu wielu zapytań, stosujących grupowanie według wszystkich kombinacji podanych kolumn.

Przykładem tego działania operatora przedstawia rysunek powyżej, gdzie można zauważyć że w pierwszej części podsumowało nam z każdego kwartału ilość sprzedaży a pod spodem podsumowało nam wszystko. Następnie z każdego roku zostały podsumowane kwartały i podsumowany cały rok.

Dodatkowo możemy wybrać dany rok z listy rozwijanej

Rysunek 7 . Procedura znajduje się w pliku bazy_sprzedaz_M.psp

Rysunek 7. Przedstawia tabelkę sprzedaży w poszczególnych miesiącach. Do tej tabelki został użyty operator CUBE którego działanie omówiłem powyżej w punkcie 6

Rysunek 8 Procedura znajduje się w pliku bazy_inne.psp

Rysunek 8. Przedstawia nam linki do kolejnych tabel.

Rysunek 9 Procedura znajduje się w pliku bazy_inne.psp

Rysunek 9. Przedstawia nam kupno towaru w różnych okresach czasowych. Do wyświetlenia takiej tabelki użyliśmy operator GROUPING SETS, który umożliwia realizację wielu zadanych schematów grupowania w jednym przebiegu zapytania SELECT. Jego argumentem jest lista wielu zestawów kolumn grupujących. Odwołując się do obrazka powyżej to można zauważyć jak operator GROUPING SETS w pierwszej kolejności przedstawia sumę ilości kupionego towaru dla danej stacji. Później mamy sumę według poszczególnych miesięcy, nastepnie według nr dnia a na końcu według roku.

Poniżej przedstawiam zapytanie wyświetlającą taką tabelkę użytym operatorem GROUPING SETS.

<% FOR bazy_inne1 IN (

SELECT stacja.nazwa_s,czas.nazwa_miesiaca,dzien.nr_dnia,kwartal.rok,Sum(towar.ilosc)ilosc

FROM stacja_benzynowa, stacja, czas, kwartal,dzien,towar,dostawca

WHERE stacja.id_stacja=stacja_benzynowa.id_stacji

AND kwartal.id_kwartal=czas.id_kwartal

AND dzien.id_dzien=czas.id_dzien

AND czas.id_czas=stacja_benzynowa.id_czas

AND towar.id_towar=dostawca.id_towaru

AND dostawca.id_dostawca=stacja_benzynowa.id_dostawca

GROUP BY GROUPING SETS (stacja.nazwa_s,czas.nazwa_miesiaca,dzien.nr_dnia,kwartal.rok)

) LOOP %>

Rysunek 10 Procedura znajduje się w pliku bazy_inne2.psp

Rysunek 10. Przedstawia koszty utrzymania pracowników. Został tu urzyty operator ROLLUP który stanowi rozszerzenie klauzuli GROUP BY zapytania SELECT, pozwalające na wyznaczaniu wartości funkcji grupowych na rosnących poziomach agregacji. Dzięki zastosowaniu tego mechanizmu bez konieczności stosowania dodatkowych zapytań możemy w jednym zapytaniu uzyskać podsumowanie roczne pensji ze wszystkich miesięcy. Mechanizm ten zwiększa wydajność aplikacji.

Poniżej przedstawiam zapytanie wyświetlającą taką tabelkę:

<% FOR bazy_inne2 IN (

SELECT czas.nazwa_miesiaca,kwartal.rok,Sum(pracownik.wynagrodzenie)kwota

FROM pracownik,stacja,stacja_benzynowa,czas,kwartal

WHERE kwartal.id_kwartal=czas.id_kwartal

AND czas.id_czas=stacja_benzynowa.id_czas

AND pracownik.id_pracownik=stacja.id_pracownik

AND stacja.id_stacja=stacja_benzynowa.id_stacji

GROUP BY ROLLUP (czas.nazwa_miesiaca), kwartal.rok ORDER BY kwartal.rok DESC

) LOOP %>

Rysunek 11 Procedura znajduje się w pliku bazy_inne3.psp

Rysunek 11. Przedstawia Ilość dochodów uzyskanych od początku naszej działalności. Do tego celu użyliśmy Funkcji analitycznej SQL PARTITION, wyrażenie umożliwia prosty zapis wyrażeń analitycznych, które w przeszłości koniecznie wymagały stosowania podzapytań. Poniżej przedstawiam nasz przykład z napisaną funkcją analityczną PARTITION w celu zwrócenia wartości funkcji grupowej SUM() która sumuje dochód z danego towaru.

<% FOR bazy_inne3 IN (

SELECT DISTINCT nazwa_t,Sum(cena) over (PARTITION BY nazwa_t)kwota

FROM towar

) LOOP %>

Rysunek 12 Procedura znajduje się w pliku bazy_inne4.psp

Rysunek 12. Przedstawia tabelke porównujacą ilość sprzedaży i kupna poszczególnych stacji. Użyty ostał operator ROLLUP którego działanie opisywałem pod rysunkiem nr.10. który podsumowuje nam dla stacji ilość sprzedaży oraz ilość kupionego towaru.

Poniżej przedstawiam zapytanie wyświetlającą taką tabelkę:

<% FOR bazy_inne3 IN (

SELECT stacja.nazwa_s,Sum(stacja_benzynowa.ilosc_sprzedazy)ilosc_sp,towar.nazwa_t,Sum(towar.ilosc)ilosc_ku

FROM stacja,stacja_benzynowa,dostawca,towar

WHERE stacja.id_stacja=stacja_benzynowa.id_stacji

AND towar.id_towar=dostawca.id_towaru

AND dostawca.id_dostawca=stacja_benzynowa.id_dostawca

Group by ROLLUP(stacja.nazwa_s, towar.nazwa_t) ORDER BY stacja.nazwa_s, towar.nazwa_t

) LOOP %>

Rysunek 13 Procedura znajduje się w pliku bazy_inne5.psp

Rysunek 13. Przedstawia średnia ilość wydatków na towar za trzy ostatnie kwartały danego roku (wraz z bieżącym kwartałem). Została tu wykorzystana funkcja analityczna PARTITION tak zwane RUCHOME OKNO OBLICZENIOWE Grupy takie nazywane są oknami i mogą być definiowane przy pomocy wyrażeń ROWS lub RANGE. W naszym przypadku użyliśmy ROWS które definiuje tzw. Okno fizyczne, którego rozmiar określony jest liczbą rekordów.

Poniżej przedstawiam zapytanie wyświetlającą taką tabelkę:

<% FOR bazy_inne5 IN (

SELECT distinct kwartal.rok, kwartal.nr_kwartalu ,Round(avg(towar.cena) over (PARTITION BY kwartal.rok ORDER BY kwartal.nr_kwartalu RANGE BETWEEN 3 preceding AND CURRENT ROW))AS srednia

FROM towar, dostawca, stacja_benzynowa, czas, kwartal

WHERE towar.id_towar = dostawca.id_towaru AND dostawca.id_dostawca = stacja_benzynowa.id_dostawca AND stacja_benzynowa.id_czas = czas.id_czas AND

czas.id_kwartal = kwartal.id_kwartal ORDER BY kwartal.rok DESC

) LOOP %>


Wyszukiwarka

Podobne podstrony:
ProjektUnifikacja sprawozdanie Nieznany
projekt sprawozdanie
Projekt sprawozdanie
Informatyczne Podstawy Projektowania sprawozdanie
Projekt-sprawozdanie
Projekt-sprawozdanie
Projekt-sprawozdanie
Projekt 1 Sprawozdanie
CUR projekt? SPRAWOZDANIE
Projekt sprawozdanie id 399569 Nieznany
Projekt+Sprawozdanie, WZMACNIACZ TRANZYSTOROWY, PAŃSTWOWA WYŻSZA SZKOŁA ZAWODOWA W ELBLĄGU
plyny tunele, Sprawozdania i projekty, Sprawozdania
projekt1, SPRAWOZDANIA czyjeś
GTG projekt 3 - sprawozdania polroczna i kwartalne, FIR UE Katowice, SEMESTR VI, gieldy, gieldy 1, G
Projekt1, sprawozdanie, Politechnika Radomska
ProjektUnifikacja sprawozdanie unifikacja
Projekt sprawozdanie
ProjektUnifikacja sprawozdanie Nieznany
Projekt sprawozdanie Śledzik Łukasz(1)

więcej podobnych podstron