Oracle PL/SQL - Kursy 24 · Oracle PL/SQL Paweł Rajba [email protected]

17
Oracle PL/SQL Oracle PL/SQL Paweł Rajba Paweł Rajba [email protected] http://www.kursy24.eu/

Transcript of Oracle PL/SQL - Kursy 24 · Oracle PL/SQL Paweł Rajba [email protected]

Page 1: Oracle PL/SQL - Kursy 24 · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl

Oracle PL/SQLOracle PL/SQL

Paweł RajbaPaweł Rajba

[email protected]://www.kursy24.eu/

Page 2: Oracle PL/SQL - Kursy 24 · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl

Zawartość modułu 3Zawartość modułu 3

RekordyTabele

indeksoweasocjacyjne

Oracle PL/SQL Copyright © Paweł Rajba- 2 -

Page 3: Oracle PL/SQL - Kursy 24 · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl

RekordyRekordy

Co to jest rekord?Co to jest rekord?Rodzaje rekordówRodzaje rekordów

Rekordy użytkownikaRekordy użytkownikaRekordy tabeloweRekordy tabeloweRekordy kursoroweRekordy kursorowe

Oracle PL/SQL Copyright © Paweł Rajba- 3 -

Page 4: Oracle PL/SQL - Kursy 24 · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl

Definiowanie rekorduDefiniowanie rekordu

Najpierw typTYPE nazwa-typu-rekordu IS RECORD( pole1 typ [NOT NULL] [ DEFAULT v1 | := expr ], pole2 typ [NOT NULL] [ DEFAULT v2 | := expr ], ... poleN typ [NOT NULL] [ DEFAULT vN | := expr ] );

Potem zmiennanazwa-rekordu nazwa-typu-rekodu

Oracle PL/SQL Copyright © Paweł Rajba- 4 -

Page 5: Oracle PL/SQL - Kursy 24 · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl

Definiowanie rekorduDefiniowanie rekordu

Uwagitypem może być także inny typ rekordowydeklaracja typu rekordowego nie wiąże się z alokacją jakichś zasobówjeśli pole ma atrybut not null, musi mieć zdefiniowaną wartość domyślną

Oracle PL/SQL Copyright © Paweł Rajba- 5 -

Page 6: Oracle PL/SQL - Kursy 24 · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl

Używanie typu rekordowegoUżywanie typu rekordowego

Dostęp do pól rekordunazwa-rekordu.nazwa-pola

Testowanie równościPolega na porównaniu wszystkich pól po kolei

Przypisanie wartości dla poszczególnych pólRęczne przypisanie wartościZa pomocą instrukcji select .. into (kursor domyślny)Za pomocą instrukcji fetch .. into (kursor użytkownika)Przypisanie rekordów

Oracle PL/SQL Copyright © Paweł Rajba- 6 -

Page 7: Oracle PL/SQL - Kursy 24 · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl

Nadanie wartości dla pól rekorduNadanie wartości dla pól rekordu

Ręczne przypisanie wartości (oczywiste)Za pomocą instrukcji SELECT .. INTO

TYPE trec IS RECORD ...rec trec;SELECT p1, ..., pN INTO rec FROM ...Możemy też korzystać z konstrukcjiSELECT p1, ..., pN INTO v1, ..., vN FROM ...UWAGA: Pobrany musi być dokładnie jeden wiersz

Za pomocą instrukcji FETCH .. INTOOmówione przy okazji kursorów

Oracle PL/SQL Copyright © Paweł Rajba- 7 -

Page 8: Oracle PL/SQL - Kursy 24 · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl

Nadanie wartości dla pól rekorduNadanie wartości dla pól rekordu

Przypisanie rekordówNazywane też przypisaniem agregującymRównoważne przypisaniu kolejnych pól rekorduRekordy muszą być tego samego typuSkładnia

rec1 := rec2

Przykład: rekordy-użytkownika.txt

Oracle PL/SQL Copyright © Paweł Rajba- 8 -

Page 9: Oracle PL/SQL - Kursy 24 · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl

Rekordy tabeloweRekordy tabelowe

Deklaracjazmienna nazwa_tabeli%ROWTYPE;

KomentarzRekord taki tworzymy w oparciu o istniejącą tabelęStruktura rekordu odpowiada strukturze tabeliW rekordzie zawsze występują wszystkie pola tabeliZmiana struktury tabeli powoduje automatyczną zmianę struktury rekordu

Oracle PL/SQL Copyright © Paweł Rajba- 9 -

Page 10: Oracle PL/SQL - Kursy 24 · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl

Operacje SQL i rekordyOperacje SQL i rekordy

Instrukcja INSERTINSERT INTO tabela VALUES zmienna_rekordowa

Instrukcja UPDATEUPDATE tabel SET ROW=rekord [ WHERE ... ]

Uwagirekord nie może mieć pól typu rekordowegoprzy update'cie zawsze zmieniamy cały wiersz tabeli

Przykład: rekordy-sql.txt

Oracle PL/SQL Copyright © Paweł Rajba- 10 -

Page 11: Oracle PL/SQL - Kursy 24 · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl

Tabele indeksoweTabele indeksowe

WprowadzeniePodobne do tablic w innych językach programowaniaTablice nie mają ograniczenia na indeksyIndeksy nie muszą być kolejne, mogą być także ujemneTabela jest tworzona w momencie przypisania wartości pierwszemu elementowiElementami tabeli mogą być także rekordy

Oracle PL/SQL Copyright © Paweł Rajba- 11 -

Page 12: Oracle PL/SQL - Kursy 24 · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl

Definiowanie tabeli indeksowejDefiniowanie tabeli indeksowej

Definiowanie typuTYPE nazwa_type IS TABLE OF typ_elementów[NOT NULL] INDEX BY BINARY_INTEGER;

Deklaracja zmiennejnazwa_tabeli nazwa_typu

PrzykładTYPE TNumTab IS TABLE OF NUMBER INDEX BY BINARY_INTEGERtablica TNumTab

Oracle PL/SQL Copyright © Paweł Rajba- 12 -

Page 13: Oracle PL/SQL - Kursy 24 · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl

Używanie tabeli indeksowejUżywanie tabeli indeksowej

Przypisanie wartościtabela(indeks) := wartość;

Nie można się odwoływać do elementów o indeksach, do których nic nie przypisaliśmy

Przypisanie agregującet1 ttab;t2 ttab;...t2 := t1;

powoduje przepisanie wszystkich elementów z t1 do t2

Oracle PL/SQL Copyright © Paweł Rajba- 13 -

Page 14: Oracle PL/SQL - Kursy 24 · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl

Metody tabel indeksowychMetody tabel indeksowych

EXISTSSkładnia: tabela.EXISTS( indeks )

COUNTSkładnia: tabela.COUNT

DELETESkładnia: tabela.DELETESkładnia: tabela.DELETE(indeks)Składnia: tabela.DELETE(idx_od, idx_do)

Oracle PL/SQL Copyright © Paweł Rajba- 14 -

Page 15: Oracle PL/SQL - Kursy 24 · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl

Metody tabel indeksowychMetody tabel indeksowych

FIRSTSkładnia: tabela.FIRST

LASTSkładnia: tabela.LAST

NEXTSkładnia: tabela.NEXT( indeks )

PRIORSkładnia: tabela.PRIOR( indeks )

Oracle PL/SQL Copyright © Paweł Rajba- 15 -

Page 16: Oracle PL/SQL - Kursy 24 · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl

Tabele asocjacyjneTabele asocjacyjne

To samo co tabele indeksowe, tylko indeksowane ciągami znakówDefiniowanie typu

TYPE nazwa_type IS TABLE OF typ_elementów[NOT NULL] INDEX BY VARCHAR2(rozmiar);

Deklaracja zmiennejnazwa_tabeli nazwa_typu

PrzykładTYPE TStrTab IS TABLE OF NUMBER INDEX BY VARCHAR2(20)

Oracle PL/SQL Copyright © Paweł Rajba- 16 -

Page 17: Oracle PL/SQL - Kursy 24 · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl

Tabele indeksowe i asocjacyjneTabele indeksowe i asocjacyjne

Przykładytabele-indeksowe.txttabele-asocjacyjne.txt

Oracle PL/SQL Copyright © Paweł Rajba- 17 -