Oracle Typ rekordów PL/SQL z przykładami
⚡ Inteligentne podsumowanie
Typ rekordu PL/SQL to złożony typ danych, który grupuje kilka kolumn, z których każda ma własną nazwę i typ danych, w jeden nowy typ. Rekord można zdefiniować na poziomie bazy danych jako obiekt składowany lub wewnątrz podprogramu, a do jego pól można uzyskać dostęp za pomocą operatora kropki.

Co to jest typ rekordu?
Typ rekordu to złożony typ danych, który pozwala programiście na utworzenie nowego typu danych o pożądanej strukturze kolumn. Jego główne cechy to:
- Grupuje jedną lub więcej kolumn, tworząc nowy typ danych.
- Każda z tych kolumn ma swoją własną nazwę i typ danych.
- Typ rekordu może akceptować dane jako pojedynczy rekord składający się z wielu kolumn lub może akceptować wartość dla jednej konkretnej kolumny rekordu.
- Typ rekordu to po prostu nowy typ danych. Po utworzeniu jest on zapisywany jako nowy typ danych i może być używany do deklarowania zmiennej w programach.
- Używa słowa kluczowego 'TYP' aby poinformować kompilator, że tworzony jest nowy typ danych.
- Można go utworzyć w poziom bazy danych, przechowywane jako obiekt bazy danych i używane w całej bazie danych lub w poziom podprogramu, widoczne tylko wewnątrz podprogramu.
- Typ rekordu na poziomie bazy danych można również zadeklarować dla kolumn tabeli, dzięki czemu pojedyncza kolumna będzie mogła przechowywać złożone dane.
- Dostęp do danych uzyskuje się poprzez odwołanie się do nazwy zmiennej, następnie operatora okresu (.), a następnie nazwy kolumny, jako ' . '.
Składnia deklaracji typu rekordu
Składnia deklaracji na poziomie bazy danych:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
W pierwszej składni słowo kluczowe „CREATE TYPE” instruuje kompilator, aby utworzył typ rekordu o nazwie „type_name_db” z określonymi kolumnami jako obiekt bazy danych. Jest to podawane jako pojedyncza instrukcja, a nie w bloku.
Składnia deklaracji na poziomie podprogramu:
DECLARE TYPE <type_name> IS RECORD ( <column1> <datatype>, ); BEGIN <execution_section>; END;
W tej składni tworzymy typ rekordu o nazwie „type_name” tylko wewnątrz podprogramu. W obu metodach sposób definiowania kolumny i typu danych jest podobny.
Przykład 1: Typ rekordu jako obiekt bazy danych
W tym programie pokażemy, jak utworzyć typ rekordu jako obiekt bazy danych. Tworzymy typ rekordu „emp_det” z czterema kolumnami. Kolumny i ich typy danych to:
- EMP_NO (NUMBER)
- EMP_NAME (VARCHAR2 (150))
- MENEDŻER (NUMER)
- WYNAGRODZENIE (LICZBA)
CREATE TYPE emp_det IS OBJECT ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); /
Wyjście:
Type created
Code Wyjaśnienie
- Powyższy kod tworzy typ emp_det jako obiekt bazy danych.
- Zawiera 4 kolumny: emp_no, emp_name, manager i salary, zgodnie z definicją.
- Teraz „emp_det” jest podobny do każdego innego typ danych (jak NUMBER lub VARCHAR2) i jest widoczny w całej bazie danych. Można go zatem użyć w dowolnym miejscu bazy danych do zadeklarowania zmiennej tego typu.
Przykład 2: Poziom podprogramu, dostęp na poziomie kolumny
W tym przykładzie pokażemy, jak utworzyć typ rekordu na poziomie podprogramu oraz jak wypełniać go i pobierać z niego wartości według kolumn. Tworzymy typ rekordu „emp_det” na poziomie podprogramu i używamy go do wypełniania i wyświetlania danych.
DECLARE TYPE emp_det IS RECORD ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); guru99_emp_rec emp_det; BEGIN guru99_emp_rec.emp_no:= 1001; guru99_emp_rec.emp_name:= 'XXX'; guru99_emp_rec.manager:= 1000; guru99_emp_rec.salary:= 10000; dbms_output.put_line('Employee Detail'); dbms_output.put_line ('Employee Number: '||guru99_emp_rec.emp_no); dbms_output.put_line ('Employee Name: '||guru99_emp_rec.emp_name); dbms_output.put_line ('Employee Salary: ' ||guru99_emp_rec.salary); dbms_output.put_line ('Employee Manager Number: '||guru99_emp_rec.manager); END; /
Wyjście:
Employee Detail Employee Number: 1001 Employee Name: XXX Employee Salary: 10000 Employee Manager Number: 1000
Code Wyjaśnienie
- Code wiersz 2-8: Typ rekordu „emp_det” jest zadeklarowany z kolumnami emp_no, emp_name, manager i salary o typie danych NUMBER, VARCHAR2, NUMBER i NUMBER.
- Code linia 9: Zmienna guru99_emp_rec jest zadeklarowana jako typ danych „emp_det”. zmienna może przechowywać wartość zawierającą wszystkie cztery pola.
- Code linia 11: Wypełnianie pola „emp_no” w „guru99_emp_rec” wartością 1001.
- Code linia 12: Wypełnianie pola „emp_name” wartością XXX.
- Code linia 13: Wypełnianie pola „menedżer” wartością 1000.
- Code linia 14: Wypełnianie pola „wynagrodzenie” wartością 10000.
- Code wiersz 15-19: Wyświetlanie wartości 'guru99_emp_rec' na wyjściu.
Przykład 3: Poziom podprogramu, dostęp na poziomie wiersza
W tym przykładzie pokazujemy, jak utworzyć typ rekordu na poziomie podprogramu i wypełnić go na poziomie wiersza. Tworzymy typ rekordu „emp_det” na poziomie podprogramu i używamy go do wypełniania i wyświetlania danych.
DECLARE TYPE emp_det IS RECORD ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); guru99_emp_rec emp_det; BEGIN INSERT INTO emp (emp_no, emp_name, salary, manager) VALUES (1002,'YYY',15000,1000); COMMIT; SELECT emp_no, emp_name, salary, manager INTO guru99_emp_rec FROM emp WHERE emp_no=1002; dbms_output.put_line ('Employee Detail'); dbms_output.put_line ('Employee Number: '||guru99_emp_rec.emp_no); dbms_output.put_line ('Employee Name: '||guru99_emp_rec.emp_name); dbms_output.put_line ('Employee Salary: '||guru99_emp_rec.salary); dbms_output.put_line ('Employee Manager Number: '||guru99_emp_rec.manager); END; /
Code Wyjaśnienie
- Code wiersz 2-8: Typ rekordu „emp_det” jest zadeklarowany z kolumnami emp_no, emp_name, manager i salary o typie danych NUMBER, VARCHAR2, NUMBER i NUMBER.
- Code linia 9: Zmienna guru99_emp_rec jest zadeklarowana jako typ danych „emp_det” i może zawierać wszystkie cztery pola.
- Code linia 11: Wypełnianie tabeli emp wartościami 1002 jako emp_no, YYY jako emp_name, 15000 jako salary i 1000 jako numer menedżera.
- Code linia 12: Zatwierdzanie transakcji wstawiania.
- Code linia 13: Wypełnianie zmiennej „guru99_emp_rec” na poziomie wiersza z zapytania SELECT dla pracownika nr 1002.
- Code wiersz 15-19: Wyświetlanie wartości 'guru99_emp_rec' na wyjściu.
Wyjście:
Employee Detail Employee Number: 1002 Employee Name: YYY Employee Salary: 1000 Employee Manager Number: 15000
Uwaga: Dostęp do typu rekordu jest możliwy tylko na poziomie kolumny podczas przekierowywania jego wartości do dowolnego trybu wyjściowego. Należy zauważyć, że w tym przykładzie kolejność na liście SELECT nie odpowiada kolejności pól rekordu, dlatego wartości wynagrodzenia i menedżera są zamienione w wynikach.
Typy rekordów PL/SQL
Poza zdefiniowanym przez programistę rekordem pokazanym powyżej, Oracle Oferuje dwa rodzaje zakotwiczonych rekordów, które automatycznie kopiują swoją strukturę. Użycie ich pozwala uniknąć ponownego deklarowania kolumn i utrzymuje rekord w zgodzie z tabelą lub kursorem, na którym się opiera.
| Rodzaj rekordu | Zadeklarowano z | Struktura pochodzi z |
|---|---|---|
| Rekord oparty na tabeli | nazwa_tabeli%ROWTYPE | Wszystkie kolumny tabeli |
| Rekord oparty na kursorze | nazwa_kursora%ROWTYPE | Lista wyboru kursora |
| Rekord zdefiniowany przez programistę | TYP … JEST REKORDEM | Kolumny, które wymieniasz ręcznie |
Rekord %ROWTYPE jest najbezpieczniejszym wyborem, gdy kształt powinien następować po tabeli lub kursor, ponieważ zmiana kolumny jest automatycznie wykrywana podczas kolejnej kompilacji.




