sobota, 20 listopada 2010

Kurs Oracle PL/SQL. Tablice


Tablice przechowują listę innych zmiennych tego samego typu. Tablice posiadają indeksy które numerują kolejne elementy i umożliwiają odwoływanie się do nich. Każdy z „wierszy” w tablicy zawiera więc dwa pola – pole indeksu, oraz pole wartości.
Aby zdefiniować tablicę piszemy w sekcji DECLARE :
TYPE NAZWA_TYPU IS TABLE OF WYBRANY_TYP_ZARTOŚCI
INDEX BY;


Następnie by móc z takiego typu tablicowego korzystać, muszę stworzyć zmienną nowo stworzonego typu – w tym przypadku zmienną „tab”. Aby odwołać się do poszczególnej wartości w tablicy podajemy nazwę tablicy i numer pozycji w okrągłych nawiasach.





 

Atrybuty tablic



Tablice posiadają atrybuty służące do operacji na zawartości tablic.


EXIST(x) – sprawdza czy na pozycji x znajduje się jakiś element. Zwraca wartość bool true lub false.
COUNT – zwraca ilość niepustych elementów w tablicy.
DELETE – usuwa całą zawartość tablicy
DELETE(x) – usuwa element z tablicy znajdujący się pod indeksem X.
DELETE(x,y) – usuwa z tablicy elementy począwszy od indeksu x do y.
LAST – zwraca indeks ostatniego niepustego elementu w tablicy
FIRST – zwraca indeks pierwszego niepustego elementu w tablicy
NEXT(x) – zwraca indeks następnego niepustego elementu tablicy następującego po indeksie X.
PRIOR(x) – zwraca indeks poprzedniego niepustego elementu tablicy znajdującego się przed indeksem x.


Przykłady wykorzystania atrybutów tablic :
 



Ćwiczenia



1. Stwórz blok anonimowy. Zdefiniuj w nim tablicę typu varchar2 o długości tysiąca pozycji. Zainicjuj wszystkie pozycje treścią "pusto".
2. Do bloku z ćwiczenia nr. 1 dodaj podsumowanie sprawdzające i wypisujące na ekranie ile pól w tablicy zostało wypełnionych.



Ten temat omawiam na poniższych szkoleniach:
• Programowanie w PL/SQL
• Podstawy SQL i PL/SQL
Możesz w nich uczestniczyć, a jako czytelnik tego bloga otrzymasz 10% zniżki - poinformuj o tym fakcie konsultanta.

8 komentarzy:

  1. czym jest zapis "index by binary_integer", a w szczególności "binary_integer"

    OdpowiedzUsuń
  2. Chodzi o to, że odwołując się do jakiegoś elementu w tablicy odwolujemy się po indeksie. Ten indeks też musi być jakiegoś typu danych. Jest to binary_integer, pls_integer albo varchar2.

    OdpowiedzUsuń
  3. Czy tablice są tu jak listy? Mogą mieć dowolny rozmiar?

    OdpowiedzUsuń
    Odpowiedzi
    1. mogą, należy pamiętać tylko że to pamięć PGA a nie SGA wiec nalezy uwazać

      Usuń
  4. Rozwiązanie 1,2

    declare

    type tablica is table of varchar2(30)
    index by binary_integer;
    tab tablica;
    petla number;
    wypelnienie varchar2(10) default 'pusto';
    BEGIN

    for petla in 1..1000
    loop
    tab(petla) := wypelnienie;
    dbms_output.put_line('tab('||petla||')= '||wypelnienie);
    end loop;
    dbms_output.put_line('Iliść wypelnionych pól w tablicy : '||tab.count);
    end;

    OdpowiedzUsuń
  5. czy jako parametr można przekazać do procedury tablicę?
    prosiłbym o krótki przykład. szukam od kilku dni i nigdzie nie znalazłem na ten temat informacji.

    OdpowiedzUsuń
  6. Chyba jest coś nie tak w:
    -COUNT – zwraca ilość niepustych elementów w tablicy.
    Co masz na myśli przez "niepustych".

    Poniższy skrypt zwróci 5 elemntów:

    declare
    type tablica is table of varchar2(200) index by binary_integer;
    tab tablica;
    begin
    dbms_output.put_line('Ilosc elementow: ' || tab.count);
    end;

    OdpowiedzUsuń