Oracle PL/SQL - Kursy 24 · Oracle PL/SQL Paweł Rajba [email protected]
Transcript of Oracle PL/SQL - Kursy 24 · Oracle PL/SQL Paweł Rajba [email protected]
Zawartość modułu 3Zawartość modułu 3
RekordyTabele
indeksoweasocjacyjne
Oracle PL/SQL Copyright © Paweł Rajba- 2 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
Tabele indeksowe i asocjacyjneTabele indeksowe i asocjacyjne
Przykładytabele-indeksowe.txttabele-asocjacyjne.txt
Oracle PL/SQL Copyright © Paweł Rajba- 17 -