sobota, 20 listopada 2010

Kurs Oracle PL/SQL. Zmienne rekordowe



Rekord jest strukturą przypominającą obiekt lub wiersz w tabeli. Rekord posiada własne pola przechowujące dane. Aby korzystać z takiej zmiennej, musimy najpierw zdefiniować jej strukturę w sekcji DECLARE bloku PL/SQL.
Definicja rozpoczyna się od słowa „TYPE”, następna jest nazwa nowego typu, musimy też pamiętać o dodaniu klauzuli „is record”. Pomiędzy nawiasami podajemy kolejne zmienne wraz z ich typami, będące składowymi rekordu. Pomiędzy nimi stawiamy przecinki, po ostatniej zmiennej nie stawiamy go.
Posiadając już zdefiniowaną strukturę rekordu, możemy stworzyć zmienną nowo stworzonego typu.
Robimy to tak ja przy zmiennych standardowych typów podając nazwę stworzonej zmiennej a następnie nazwę nowo stworzonego typu. Musimy pamiętać, by deklaracja zmiennej nowego typu następowała po definicji tego typu.
Odwołując się do pól zmiennej rekordowej stosujemy notację kropkową. Podajemy nazwę zmiennej rekordowej, a następnie po kropce nazwę pola do którego się odnosimy.



Atrybut %ROWTYPE


Atrybut %ROWTYPE stosuje się przy definiowaniu typów rekordowych. Działa w sposób zbliżony jak atrybut %TYPE jednak dla zmiennych złożonych. Dzięki temu atrybutowi jesteśmy w stanie zadeklarować zmienną rekordową o konstrukcji opartej o konstrukcję tabeli, kursora lub innej zmiennej rekordowej.


Na powyższej ilustracji widoczny jest przykład deklarowania zmiennej w oparciu o strukturę tabeli JOBS (w schemacie HR) . Zmienna1 posiada więc te same pola jakie występują w tabeli jobs. Do poszczególnych pól odwołujemy się w ten sam sposób jak w przypadku zwykłej zmiennej rekordowej.


Parametry pól rekordu



Podobnie jak w przypadku zmiennych prostych, także i w przypadku pól rekordu możemy stosować takie parametry jak DEFAULT, NOT NULL. Na poniższym przykładzie zaprezentowałem zastosowanie obu. Doszła nam jeszcze jedna możliwość – pole rekordu może samo być rekordem!
Mamy więc możliwość stworzenia tablicy wielowymiarowej. W poniższym przykładzie zdeklarowałem pole moj_rekord będące rekordem utworzonym na podstawie struktury wiersza tabeli jobs.
 





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.

4 komentarze:

  1. Jako składowej zmiennej rekordowej nie można podawać wartości CONSTANT, prawda?
    Taka deklaracja np. nie działa poprawnie:

    DECLARE
    TYPE moj IS RECORD(
    v1 number(3) not null :=1,
    v2 regions%rowtype,
    v3 jobs%rowtype,
    v4 NUMBER(3) NOT NULL := 999,
    v5 varchar2(20) default 'Znaczy nie dziala',
    v6 number(1) not null :=0,
    v7 constant number(2) :=33
    );
    BEGIN
    NULL;
    END;
    /

    Rozumiem że zmienna jest zmienną a nie stałą, lecz jedną ze składowych także nie może być stała? Empirycznie wychodzi że nie :)

    OdpowiedzUsuń
  2. Dokładnie tak, rekord jest zmienną złożoną zawierającą liste ZMIENNYCH, zatem tylko default i not null jest dozwolone.

    OdpowiedzUsuń
  3. Jeżeli tworzę zmienną odnosząc się do kolumny która zawiera zmienne number to w tym momencie
    zmienna2.max_salary := 2000;
    będzie poprawne? (bez apostrofów)

    OdpowiedzUsuń