Export oraz import danych z baz Oracle

Export oraz import danych z baz Oracle

Projekt: utworzenie bazy danych, oraz przygotowanie zestawu komend eksportujących oraz importujących dane z tabel i do tabel.

1. Wyświetla wszystkich pracowników pracujących w poszczególnych miastach w poszczególnych kinach.

Export danych z tabeli:
SELECT XMLELEMENT("MIASTO", 
  xmlattributes(miasto as "nazwa"),
  XMLAGG(xmlforest(imie,nazwisko,email,numer_telefonu,wynagrodzenie))) dane_xml
from pracownicy p 
join kina k 
on (p.id_kino=k.id_kino)
group by miasto;
Plik XML:
<pracownicy>
<MIASTO nazwa="Bydgoszcz">
 <IMIE>David</IMIE><NAZWISKO>Austin</NAZWISKO><EMAIL>DAUSTIN@wp.pl</EMAIL>
 <NUMER_TELEFONU>590-423-4569</NUMER_TELEFONU><WYNAGRODZENIE>4800.5</WYNAGRODZENIE>
 <IMIE>Steven</IMIE><NAZWISKO>King</NAZWISKO><EMAIL>SKING@wp.pl</EMAIL>
 <NUMER_TELEFONU>515-123-4567</NUMER_TELEFONU><WYNAGRODZENIE>24001.5</WYNAGRODZENIE>
 <IMIE>Neena</IMIE><NAZWISKO>Kochhar</NAZWISKO><EMAIL>NKOCHHAR@wp.pl</EMAIL>
 <NUMER_TELEFONU>515-123-4568</NUMER_TELEFONU><WYNAGRODZENIE>17000.5</WYNAGRODZENIE>
</MIASTO>
<MIASTO nazwa="Gdansk">
 <IMIE>Bruce</IMIE><NAZWISKO>Ernst</NAZWISKO><EMAIL>BERNST@wp.pl</EMAIL>
 <NUMER_TELEFONU>590-423-4568</NUMER_TELEFONU><WYNAGRODZENIE>6000.5</WYNAGRODZENIE>
</MIASTO>
<MIASTO nazwa="Katowice">
 <IMIE>Alexander</IMIE><NAZWISKO>Hunold</NAZWISKO><EMAIL>AHUNOLD@wp.pl</EMAIL>
 <NUMER_TELEFONU>590-423-4567</NUMER_TELEFONU><WYNAGRODZENIE>9000.5</WYNAGRODZENIE>
</MIASTO>
<MIASTO nazwa="Szczecin">
 <IMIE>Valli</IMIE><NAZWISKO>Pataballa</NAZWISKO><EMAIL>VPATABAL@wp.pl</EMAIL>
 <NUMER_TELEFONU>590-423-4560</NUMER_TELEFONU><WYNAGRODZENIE>4800.5</WYNAGRODZENIE>
</MIASTO>
<MIASTO nazwa="Warszawa">
 <IMIE>Lex</IMIE><NAZWISKO>De Haan</NAZWISKO><EMAIL>LDEHAAN@wp.pl</EMAIL>
 <NUMER_TELEFONU>515-123-4569</NUMER_TELEFONU><WYNAGRODZENIE>17001.5</WYNAGRODZENIE>
</MIASTO>
</pracownicy>
Tabela przygotowana do importu danych:
CREATE TABLE "HR"."PRACOWNICY_W_MIASTACH" 
( "MIASTO" VARCHAR2(20 BYTE), 
"IMIE" VARCHAR2(20 BYTE), 
"NAZWISKO" VARCHAR2(20 BYTE), 
"EMAIL" VARCHAR2(30 BYTE), 
"NUMER_TELEFONU" VARCHAR2(20 BYTE), 
"WYNAGRODZENIE" NUMBER(6,0)
) SEGMENT CREATION IMMEDIATE 
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS" ;
Import danych:
DECLARE
 pliczek xmltype := xmltype( bfilename('PLIKI_XML','1.xml'), nls_charset_id('AL32UTF8') );
liczba number:=0;
BEGIN
        FOR E IN (SELECT
        EXTRACTVALUE(VALUE(X), '/IMIE/text()') AS aa
        FROM TABLE(XMLSEQUENCE(EXTRACT(pliczek, '//pracownicy/MIASTO/IMIE'))) X)
        loop
        liczba:=liczba+1;
                 FOR R IN (SELECT 
                 EXTRACTVALUE(VALUE(Z), '/MIASTO/@nazwa') AS miasto,
				 EXTRACTVALUE(VALUE(Z), '/MIASTO/IMIE[position()='||liczba||']') AS imie,
         EXTRACTVALUE(VALUE(Z), '/MIASTO/NAZWISKO[position()='||liczba||']') AS nazwisko,
         EXTRACTVALUE(VALUE(Z), '/MIASTO/EMAIL[position()='||liczba||']') AS email,
         EXTRACTVALUE(VALUE(Z), '/MIASTO/NUMER_TELEFONU[position()='||liczba||']') AS telefon,
         EXTRACTVALUE(VALUE(Z), '/MIASTO/WYNAGRODZENIE[position()='||liczba||']') AS wynagrodzenie
        FROM TABLE(XMLSEQUENCE(EXTRACT(pliczek, '//pracownicy/MIASTO'))) Z)
        LOOP
          if R.imie is not null then
          insert into pracownicy_w_miastach (miasto,imie, nazwisko,email,numer_telefonu,wynagrodzenie) values (R.miasto,R.imie, R.nazwisko,R.email,R.telefon,R.wynagrodzenie);
          end if;
          END LOOP;
END LOOP;
END;

2. Wyświetla sprzedane bilety (na 1000 dni przed wykonaniem exportu) w danym mieście, pokazuje zysk jak i datę zakupu.

Zmienne:
– możliwe ustawienie ilość dni wstecz do wykonania raportu.

Export danych z tabeli:

SELECT XMLELEMENT("MIASTO",xmlattributes(miasto as "nazwa"),
 xmlagg(xmlconcat(xmlelement("TYTUL", f.tytul),
 xmlelement("DATA_SPRZEDAZY", e.data_sprzedazy),
 xmlelement("ZYSK", e.zysk)
 ))) dane_xml
 from ewidencja e
 join kina k on (e.id_kino=k.id_kino)
 join filmy f on (e.film_id=f.film_id)
 where ((sysdate - data_sprzedazy)<1000)
 group by k.miasto;
Plik XML:
<bilety>
<MIASTO nazwa="Bydgoszcz">
	<TYTUL>Matrix</TYTUL><DATA_SPRZEDAZY>2016-06-17</DATA_SPRZEDAZY><ZYSK>12</ZYSK>
	<TYTUL>Avatar</TYTUL><DATA_SPRZEDAZY>2016-09-21</DATA_SPRZEDAZY><ZYSK>25</ZYSK>
	<TYTUL>Avatar</TYTUL><DATA_SPRZEDAZY>2015-06-25</DATA_SPRZEDAZY><ZYSK>10</ZYSK>
	<TYTUL>Straszny Film</TYTUL><DATA_SPRZEDAZY>2016-12-05</DATA_SPRZEDAZY><ZYSK>10</ZYSK>
</MIASTO>
<MIASTO nazwa="Gdansk">
	<TYTUL>Assasins Creed</TYTUL><DATA_SPRZEDAZY>2014-05-21</DATA_SPRZEDAZY><ZYSK>12</ZYSK>
</MIASTO>
<MIASTO nazwa="Lodz">
	<TYTUL>Szklana Pulapka</TYTUL><DATA_SPRZEDAZY>2016-01-13</DATA_SPRZEDAZY><ZYSK>25</ZYSK>
</MIASTO>
<MIASTO nazwa="Warszawa">
	<TYTUL>Assasins Creed</TYTUL><DATA_SPRZEDAZY>2016-01-03</DATA_SPRZEDAZY><ZYSK>12</ZYSK>
</MIASTO>
</bilety>
Tabela przygotowana do importu danych:
CREATE TABLE "HR"."SPRZEDANE_BILETY"
 ( "MIASTO" VARCHAR2(20 BYTE),
 "TYTUL" VARCHAR2(20 BYTE),
 "DATA_SPRZEDAZY" VARCHAR2(20 BYTE),
 "ZYSK" NUMBER
 ) SEGMENT CREATION IMMEDIATE
 PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
 TABLESPACE "USERS" ;
Import danych:
DECLARE
pliczek xmltype := xmltype( bfilename('PLIKI_XML','2.xml'), nls_charset_id('AL32UTF8') );
liczba number:=0;
BEGIN
FOR E IN (SELECT
EXTRACTVALUE(VALUE(X), '/MIASTO/@nazwa') AS miastok
FROM TABLE(XMLSEQUENCE(EXTRACT(pliczek, '//bilety/MIASTO/TYTUL'))) X)
loop
 liczba:=liczba+1;
 FOR R IN (SELECT
 EXTRACTVALUE(VALUE(Z), '/MIASTO/@nazwa') AS miasto,
 EXTRACTVALUE(VALUE(Z), '/MIASTO/TYTUL[position()='||liczba||']') AS tytul,
 EXTRACTVALUE(VALUE(Z), '/MIASTO/DATA_SPRZEDAZY[position()='||liczba||']') AS datas,
 EXTRACTVALUE(VALUE(Z), '/MIASTO/ZYSK[position()='||liczba||']') AS zysk
 FROM TABLE(XMLSEQUENCE(EXTRACT(pliczek, '//bilety/MIASTO'))) Z)
 LOOP
if R.tytul is not null then
 insert into sprzedane_bilety (miasto,tytul,data_sprzedazy,zysk) values (R.miasto,R.tytul,R.datas,R.zysk);
 end if;
 END LOOP;
 END LOOP;
 END;

3. Wyświetla pracowników ze stażem większym niż "liczba" oraz wynagrodzeniem większym niż "wynagrodzenie".

Zmienne:
– liczba dni określająca ilość dni zatrudnienia,
– wynagrodzenie określające wysokość wynagrodzenia pracowników.

Export danych z tabeli:

SELECT XMLELEMENT("Pracownik",
 xmlattributes(pracownik_id as "ID"),
 xmlelement("Imie",imie ),
 xmlelement("nazwisko",nazwisko ),
 xmlelement("zatrudniony",data_zatrudnienia )
 ) dane_xml
 from pracownicy p where ((sysdate - data_zatrudnienia)<10000) and wynagrodzenie > 10000;
Plik XML:
<pracownicy>
<Pracownik ID="2">
 <Imie>Neena</Imie><nazwisko>Kochhar</nazwisko><zatrudniony>1989-09-21</zatrudniony>
 </Pracownik>
 <Pracownik ID="3">
 <Imie>Lex</Imie><nazwisko>De Haan</nazwisko><zatrudniony>1993-01-13</zatrudniony>
 </Pracownik>
 </pracownicy>
Tabela przygotowana do importu danych:
CREATE TABLE "HR"."PRACOWNICY_ZE_STAZEM"
 ( "ID" NUMBER,
 "IMIE" VARCHAR2(20 BYTE),
 "NAZWISKO" VARCHAR2(20 BYTE),
 "ZATRUDNIONY" VARCHAR2(20 BYTE)
 ) SEGMENT CREATION IMMEDIATE
 PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
 TABLESPACE "USERS" ;
Import danych:
DECLARE
 pliczek xmltype := xmltype( bfilename('PLIKI_XML','3.xml'), nls_charset_id('AL32UTF8') );
 BEGIN
 FOR R IN (SELECT
 EXTRACTVALUE(VALUE(Z), '/Pracownik/@ID') AS ids,
 EXTRACTVALUE(VALUE(Z), '/Pracownik/Imie/text()') AS imie,
 EXTRACTVALUE(VALUE(Z), '/Pracownik/zatrudniony/text()') AS zatrudniony,
 EXTRACTVALUE(VALUE(Z), '/Pracownik/nazwisko/text()') AS nazwisko
 FROM TABLE(XMLSEQUENCE(EXTRACT(pliczek, '//pracownicy/Pracownik'))) Z)
 LOOP
 insert into pracownicy_ze_stazem (ID,imie, nazwisko,zatrudniony) values (R.ids,R.imie, R.nazwisko,R.zatrudniony);
 END LOOP;
 END;

4. Wypisuje listę faktur, grupując osobami na które zostały wystawione, podaje także datę wystawienia oraz kwotę.

Export danych z tabeli:

SELECT XMLELEMENT("Faktura",xmlattributes(k.nazwisko as "nazwisko", k.karta_id as "id"),
 XMLAGG( xmlconcat(XMLELEMENT("kwota", kwota),
 XMLELEMENT("data_wystawienia", data_wystawienia)
 ))) dane_xml
 from faktury f
 join karty_stalego_klienta k on (f.karta_id=k.karta_id)
 group by k.nazwisko, k.karta_id;
Plik XML:
<Ewidencje>
 <Faktura nazwisko="King" id="1">
 <kwota>300</kwota><data_wystawienia>2016-02-05</data_wystawienia>
 <kwota>3030</kwota><data_wystawienia>2016-06-17</data_wystawienia>
 <kwota>3010</kwota><data_wystawienia>2016-09-21</data_wystawienia>
 </Faktura>
 <Faktura nazwisko="De Haan" id="3">
 <kwota>300</kwota><data_wystawienia>2014-05-21</data_wystawienia>
 </Faktura>
 <Faktura nazwisko="Kochhar" id="2">
 <kwota>100</kwota><data_wystawienia>2015-06-25</data_wystawienia>
</Faktura>
 </Ewidencje>
Tabela przygotowana do importu danych:
CREATE TABLE "HR"."LISTA_FAKTUR"
( "NAZWISKO" VARCHAR2(20 BYTE),
 "ID" VARCHAR2(20 BYTE),
 "KWOTA" VARCHAR2(20 BYTE),
 "DATA_WYSTAWIENIA" VARCHAR2(20 BYTE)
 ) SEGMENT CREATION DEFERRED
 PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
 TABLESPACE "USERS" ;
Import danych:
DECLARE
pliczek xmltype := xmltype( bfilename('PLIKI_XML','4.xml'), nls_charset_id('AL32UTF8') );
 liczba number:=0;
 BEGIN
 FOR E IN (SELECT
 EXTRACTVALUE(VALUE(X), '/Faktura/@nazwisko') AS miastok
 FROM TABLE(XMLSEQUENCE(EXTRACT(pliczek, '//Ewidencje/Faktura/kwota'))) X)
loop
 liczba:=liczba+1;
 FOR R IN (SELECT
 EXTRACTVALUE(VALUE(Z), '/Faktura/@nazwisko') AS nazwisko,
 EXTRACTVALUE(VALUE(Z), '/Faktura/@id') AS ids,
 EXTRACTVALUE(VALUE(Z), '/Faktura/data_wystawienia[position()='||liczba||']') AS data_wystawienia,
 EXTRACTVALUE(VALUE(Z), '/Faktura/kwota[position()='||liczba||']') AS kwota
 FROM TABLE(XMLSEQUENCE(EXTRACT(pliczek, '//Ewidencje/Faktura'))) Z)
 LOOP
if R.kwota is not null then
 insert into lista_faktur (nazwisko,id,kwota,data_wystawienia) values (R.nazwisko,R.ids,R.kwota,R.data_wystawienia);
 end if;
 END LOOP;
 END LOOP;
 END;

5. Select wyświetlający wszystkie transakcje zawarte w danym kinie, zarówno te z kartą stałego klienta jak i bez niej przez wyznaczonego pracownika.

Zmienne
– numer pracownika.

Export danych z tabeli:

SELECT XMLELEMENT("Ewidencja",
XMLATTRIBUTES(e.ewidencja_id, e.typ_biletu),
XMLELEMENT("Paragon", XMLATTRIBUTES(e.pracownik_id,(SELECT d.nazwisko FROM pracownicy d WHERE d.pracownik_id = e.pracownik_id) as "Nazwisko"),
XMLELEMENT("Miasto",(SELECT d.miasto FROM kina d WHERE d.id_kino = e.id_kino)) as "Kino"),
XMLELEMENT("Zysk", e.zysk),
XMLELEMENT("Data", e.data_sprzedazy)) AS "Element"
 FROM ewidencja e
 WHERE pracownik_id = 1;
Plik XML:
<Ewidencje>
<Ewidencja EWIDENCJA_ID="5" TYP_BILETU="Ulgowy">
 <Paragon PRACOWNIK_ID="1" Nazwisko="King">
 <Miasto>Gdansk</Miasto>
 </Paragon>
 <Zysk>12</Zysk><Data>2014-05-21</Data>
 </Ewidencja>
 <Ewidencja EWIDENCJA_ID="7" TYP_BILETU="Inny"><Paragon PRACOWNIK_ID="1" Nazwisko="King"><Miasto>Bydgoszcz</Miasto></Paragon><Zysk>10</Zysk><Data>2016-12-05</Data></Ewidencja>
 </Ewidencje>
Tabela przygotowana do importu danych:
CREATE TABLE "HR"."EWIDENCJA_PRAC_KINO"
( "EWIDENCJA_ID" NUMBER,
"TYP_BILETU" VARCHAR2(20 BYTE),
 "PRACOWNIK_ID" NUMBER,
 "NAZWISKO" VARCHAR2(20 BYTE),
 "MIASTO" VARCHAR2(20 BYTE),
 "ZYSK" NUMBER,
 "DATA_WYD" VARCHAR2(20 BYTE)
 ) SEGMENT CREATION IMMEDIATE
 PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
 TABLESPACE "USERS" ;
Import danych:
DECLARE
 pliczek xmltype := xmltype( bfilename('PLIKI_XML','5.xml'), nls_charset_id('AL32UTF8') );
 BEGIN
FOR R IN (SELECT
 EXTRACTVALUE(VALUE(Z), '/Ewidencja/@EWIDENCJA_ID') AS ewi_id,
 EXTRACTVALUE(VALUE(Z), '/Ewidencja/@TYP_BILETU') AS typ,
 EXTRACTVALUE(VALUE(Z), '/Ewidencja/Data/text()') AS data_wyd,
 EXTRACTVALUE(VALUE(Z), '/Ewidencja/Zysk/text()') AS zysk,
 EXTRACTVALUE(VALUE(Z), '/Ewidencja/Paragon/Miasto/text()') AS miasto,
 EXTRACTVALUE(VALUE(Z), '/Ewidencja/Data/text()') AS nazwisko,
 EXTRACTVALUE(VALUE(Z), '/Ewidencja/Paragon/@PRACOWNIK_ID') AS pra_id
 FROM TABLE(XMLSEQUENCE(EXTRACT(pliczek, '//Ewidencje/Ewidencja'))) Z)
 LOOP
 insert into ewidencja_prac_kino (EWIDENCJA_ID,TYP_BILETU, PRACOWNIK_ID,NAZWISKO,MIASTO,ZYSK,DATA_WYD) values (R.ewi_id,R.typ, R.pra_id,R.nazwisko,R.miasto,R.zysk,R.data_wyd);
 END LOOP;
 END;

6. Select wyświetlający osoby posiadające kartę stałego klienta oraz zarejestrowaną firmę na nią. (oraz są aktywne)

Export danych z tabeli:

SELECT XMLELEMENT("Firmowe",
 XMLATTRIBUTES(k.karta_id as "ID"),
 XMLFOREST(k.imie,k.nazwisko),
 XMLELEMENT("Data",k.data_utworzenia),
 XMLELEMENT("NIP", k.nip)) AS "Stali klienci"
 FROM karty_stalego_klienta k
 WHERE k.nip is not null and k.konto_zaparkowane = 0 order by k.nazwisko;
Plik XML:
<Karty>
 <Firmowe ID="3"><IMIE>Adam</IMIE><NAZWISKO>De Haan</NAZWISKO><Data>2016-01-03</Data><NIP>54326</NIP></Firmowe>
 <Firmowe ID="1"><IMIE>Jan</IMIE><NAZWISKO>King</NAZWISKO><Data>2016-06-17</Data><NIP>3123</NIP></Firmowe>
 <Firmowe ID="2"><IMIE>Jan</IMIE><NAZWISKO>Kochhar</NAZWISKO><Data>2016-09-21</Data><NIP>45323</NIP></Firmowe>
 </Karty>
Tabela przygotowana do importu danych:
CREATE TABLE "HR"."STALI_KLIENCI"
 ( "ID" NUMBER,
 "IMIE" VARCHAR2(20 BYTE),
 "NAZWISKO" VARCHAR2(20 BYTE),
 "DATA_UTWORZENIA" VARCHAR2(20 BYTE),
 "NIP" VARCHAR2(20 BYTE)
 ) SEGMENT CREATION DEFERRED
 PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
 TABLESPACE "USERS" ;
Import danych:
DECLARE
 pliczek xmltype := xmltype( bfilename('PLIKI_XML','6.xml'), nls_charset_id('AL32UTF8') );
BEGIN
 FOR R IN (SELECT
 EXTRACTVALUE(VALUE(Z), '/Firmowe/@ID') AS ids,
 EXTRACTVALUE(VALUE(Z), '/Firmowe/IMIE/text()') AS imie,
 EXTRACTVALUE(VALUE(Z), '/Firmowe/NAZWISKO/text()') AS nazwisko,
 EXTRACTVALUE(VALUE(Z), '/Firmowe/NIP/text()') AS nip,
 EXTRACTVALUE(VALUE(Z), '/Firmowe/Data/text()') AS datas
 FROM TABLE(XMLSEQUENCE(EXTRACT(pliczek, '//Karty/Firmowe'))) Z)
 LOOP
 insert into stali_klienci (ID,IMIE, NAZWISKO,NIP,DATA_UTWORZENIA) values (R.ids,R.imie, R.nazwisko,R.nip,R.datas);
 END LOOP;
 END;

7. Select wyświetlający zyski z jednego miesiąca w każdym z zarejestrowanych lat.

Zmienna:
– numer miesiąca.

Export danych z tabeli:

SELECT XMLELEMENT("Archiwum",
XMLATTRIBUTES(k.rok as "Rok"),
xmlelement("Miesiac",k.miesiac),
xmlelement("Normalne",k.normalne),
xmlelement("Ulgowe",k.ulgowe),
xmlelement("Pozostale",k.pozostale),
xmlelement("Niepodliczone",k.pozostale),
XMLELEMENT("Bilans",k.bilans)) AS "Podliczenie"
 FROM archiwum_ewidencji k
 where k.miesiac = 1
 order by k.rok;
Plik XML:
<Archiwizacja>
 <Archiwum Rok="2012"><Miesiac>1</Miesiac><Normalne>0</Normalne><Ulgowe>0</Ulgowe><Pozostale>0</Pozostale><Niepodliczone>0</Niepodliczone><Bilans>0</Bilans></Archiwum>
 <Archiwum Rok="2013"><Miesiac>1</Miesiac><Normalne>0</Normalne><Ulgowe>0</Ulgowe><Pozostale>0</Pozostale><Niepodliczone>0</Niepodliczone><Bilans>0</Bilans></Archiwum>
 <Archiwum Rok="2014"><Miesiac>1</Miesiac><Normalne>0</Normalne><Ulgowe>0</Ulgowe><Pozostale>0</Pozostale><Niepodliczone>0</Niepodliczone><Bilans>0</Bilans></Archiwum>
 <Archiwum Rok="2015"><Miesiac>1</Miesiac><Normalne>0</Normalne><Ulgowe>0</Ulgowe><Pozostale>0</Pozostale><Niepodliczone>0</Niepodliczone><Bilans>0</Bilans></Archiwum>
 <Archiwum Rok="2016"><Miesiac>1</Miesiac><Normalne>1</Normalne><Ulgowe>1</Ulgowe><Pozostale>0</Pozostale><Niepodliczone>0</Niepodliczone><Bilans>37</Bilans></Archiwum>
 <Archiwum Rok="2017"><Miesiac>1</Miesiac><Normalne>0</Normalne><Ulgowe>0</Ulgowe><Pozostale>0</Pozostale><Niepodliczone>0</Niepodliczone><Bilans>0</Bilans></Archiwum>
 </Archiwizacja>
Tabela przygotowana do importu danych:
CREATE TABLE "HR"."PODLICZENIE"
( "ROK" NUMBER,
"MIESIAC" NUMBER,
"BILANS" NUMBER,
"ULGOWE" NUMBER,
 "NORMALNE" NUMBER,
 "POZOSTALE" NUMBER
 ) SEGMENT CREATION DEFERRED
 PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
 TABLESPACE "USERS" ;
Import danych:
DECLARE
pliczek xmltype := xmltype( bfilename('PLIKI_XML','7.xml'), nls_charset_id('AL32UTF8') );
 BEGIN
 FOR R IN (SELECT
 EXTRACTVALUE(VALUE(Z), '/Archiwum/@Rok') AS rok,
 EXTRACTVALUE(VALUE(Z), '/Archiwum/Ulgowe/text()') AS ulgowe,
 EXTRACTVALUE(VALUE(Z), '/Archiwum/Normalne/text()') AS normalne,
 EXTRACTVALUE(VALUE(Z), '/Archiwum/Pozostale/text()') AS pozostale,
EXTRACTVALUE(VALUE(Z), '/Archiwum/Miesiac/text()') AS miesiac,
 EXTRACTVALUE(VALUE(Z), '/Archiwum/Bilans/text()') AS bilans
 FROM TABLE(XMLSEQUENCE(EXTRACT(pliczek, '//Archiwizacja/Archiwum'))) Z)
 LOOP
 insert into podliczenie (rok,miesiac, bilans,ulgowe,normalne,pozostale) values (R.rok,R.miesiac, R.bilans,R.ulgowe,R.normalne, R.pozostale);
 END LOOP;
 END;

8. Select wyświetlający oglądalność filmu. (popyt na dany film).

Export danych z tabeli:

SELECT XMLELEMENT("Ogladalnosc",
XMLATTRIBUTES(k.film_id as "ID"),
 xmlelement("Tytul",k.tytul),
XMLELEMENT("Status",k.status),
 xmlelement("Sprzedanych_biletow",(SELECT count(*) from ewidencja e where k.film_id = e.film_id))) AS "Ogladalnosc"
 FROM filmy k
 order by k.tytul;
Plik XML:
<Popyt>
<Ogladalnosc ID="1"><Tytul>Assasins Creed</Tytul><Status>Premiera</Status><Sprzedanych_biletow>2</Sprzedanych_biletow></Ogladalnosc>
<Ogladalnosc ID="4"><Tytul>Avatar</Tytul><Status>Normalny</Status><Sprzedanych_biletow>2</Sprzedanych_biletow></Ogladalnosc>
<Ogladalnosc ID="3"><Tytul>Matrix</Tytul><Status>Premiera</Status><Sprzedanych_biletow>1</Sprzedanych_biletow></Ogladalnosc>
 <Ogladalnosc ID="7"><Tytul>Resident Evil</Tytul><Status>Premiera</Status><Sprzedanych_biletow>0</Sprzedanych_biletow></Ogladalnosc>
 <Ogladalnosc ID="6"><Tytul>Ring</Tytul><Status>Premiera</Status><Sprzedanych_biletow>0</Sprzedanych_biletow></Ogladalnosc>
 <Ogladalnosc ID="5"><Tytul>Straszny Film</Tytul><Status>Premiera</Status><Sprzedanych_biletow>1</Sprzedanych_biletow></Ogladalnosc>
 <Ogladalnosc ID="2"><Tytul>Szklana Pulapka</Tytul><Status>Premiera</Status><Sprzedanych_biletow>1</Sprzedanych_biletow></Ogladalnosc>
 </Popyt>
Tabela przygotowana do importu danych:
CREATE TABLE "HR"."POPYT"
 ( "ID" NUMBER,
"TYTUL" VARCHAR2(20 BYTE),
 "STATUS" VARCHAR2(20 BYTE),
 "SPRZEDAZ" NUMBER
 ) SEGMENT CREATION DEFERRED
 PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
 TABLESPACE "USERS" ;
Import danych:
DECLARE
pliczek xmltype := xmltype( bfilename('PLIKI_XML','8.xml'), nls_charset_id('AL32UTF8') );
BEGIN
FOR R IN (SELECT
EXTRACTVALUE(VALUE(Z), '/Ogladalnosc/@ID') AS ids,
EXTRACTVALUE(VALUE(Z), '/Ogladalnosc/Status/text()') AS status,
EXTRACTVALUE(VALUE(Z), '/Ogladalnosc/Tytul/text()') AS tytul,
EXTRACTVALUE(VALUE(Z), '/Ogladalnosc/Sprzedanych_biletow/text()') AS sprzedaz
FROM TABLE(XMLSEQUENCE(EXTRACT(pliczek, '//Popyt/Ogladalnosc'))) Z)
LOOP
insert into popyt (id,status, tytul,sprzedaz) values (R.ids,R.status, R.tytul,R.sprzedaz);
END LOOP;
 END;

9. Select wyświetlający ilość błędnych transakcji w bazie, pogrupowane po pracowniku który daną transakcję wprowadził do bazy.

Export danych z tabeli:

SELECT XMLELEMENT("Korekty",
 xmlagg(xmlelement("Check",XMLATTRIBUTES(k.pracownik_id as "ID"),
 xmlelement("Bledy",(SELECT count(*) from ewidencja e where ((e.czy_karta = 0 and e.id_karta is not null) or (e.czy_karta = 1 and e.id_karta is null)) and e.pracownik_id = k.pracownik_id))))) AS "Ilosc bledow"
 FROM ewidencja k
 group by k.pracownik_id
 order by k.pracownik_id;
Plik XML:
<Sprawdzenie>
 <Korekty><Check ID="1"><Bledy>2</Bledy></Check><Check ID="1"><Bledy>2</Bledy></Check></Korekty>
 <Korekty><Check ID="2"><Bledy>1</Bledy></Check></Korekty>
 <Korekty><Check ID="3"><Bledy>0</Bledy></Check></Korekty>
 </Sprawdzenie>
Tabela przygotowana do importu danych:
CREATE TABLE "HR"."BLEDY"
( "PRACOWNIK_ID" NUMBER,
 "ILOSC" NUMBER
 ) SEGMENT CREATION DEFERRED
 PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
 TABLESPACE "USERS" ;
Import danych:
DECLARE
 pliczek xmltype := xmltype( bfilename('PLIKI_XML','9.xml'), nls_charset_id('AL32UTF8') );
 prac number :=0;
 BEGIN
 FOR R IN (SELECT
 EXTRACTVALUE(VALUE(Z), '/Check/@ID') AS pracownik_id,
 EXTRACTVALUE(VALUE(Z), '/Check/Bledy/text()') AS ilosc
 FROM TABLE(XMLSEQUENCE(EXTRACT(pliczek, '//Sprawdzenie/Korekty/Check'))) Z)
 LOOP
if prac <> R.pracownik_id then
 insert into bledy (pracownik_id,ilosc) values (R.pracownik_id,R.ilosc);
 end if;
 prac:=R.pracownik_id;
 END LOOP;
 END;

10. Select wyświetlający przewidywany zysk z dostępnych produktów.

Export danych z tabeli:

SELECT XMLELEMENT("Produkt", xmlattributes(produkt_id as "ID"),
 xmlelement("Nazwa",nazwa),
 xmlelement("Koszt",koszt),
 xmlelement("Zysk",(SELECT koszt*ilosc_sztuk from produkty_marketingowe where produkt_id = p.produkt_id)))
 AS "Przewidywania"
 FROM produkty_marketingowe p
 where czy_dostepny = 1 and ilosc_sprzedanych <> 0
 order by p.nazwa;
Plik XML:
<Produkty>
 <Produkt ID="2"><Nazwa>Mikser</Nazwa><Koszt>11</Koszt><Zysk>110</Zysk></Produkt>
 </Produkty>
Tabela przygotowana do importu danych:
CREATE TABLE "HR"."MOZLIWY_ZYSK"
 ( "PRODUKT_ID" NUMBER,
 "NAZWA" VARCHAR2(20 BYTE),
 "KOSZT" NUMBER,
 "PRZEWIDYWANY_ZYSK" NUMBER
 ) SEGMENT CREATION DEFERRED
 PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
 TABLESPACE "USERS" ;
Import danych:
DECLARE
 pliczek xmltype := xmltype( bfilename('PLIKI_XML','10.xml'), nls_charset_id('AL32UTF8') );
 prac number :=0;
 BEGIN
 FOR R IN (SELECT
 EXTRACTVALUE(VALUE(Z), '/Produkt/@ID') AS produkt_id,
 EXTRACTVALUE(VALUE(Z), '/Produkt/Nazwa/text()') AS nazwa,
 EXTRACTVALUE(VALUE(Z), '/Produkt/Koszt/text()') AS koszt,
 EXTRACTVALUE(VALUE(Z), '/Produkt/Zysk/text()') AS przewidywany_zysk
 FROM TABLE(XMLSEQUENCE(EXTRACT(pliczek, '//Produkty/Produkt'))) Z)
 LOOP
 insert into mozliwy_zysk (produkt_id,nazwa,koszt, przewidywany_zysk) values (R.produkt_id,R.nazwa,R.koszt,R.przewidywany_zysk);
 END LOOP;
 END;