Oracle Typ rekordów PL/SQL z przykładami
Co to jest typ rekordu?
Typ rekordu to złożony typ danych umożliwiający programiście utworzenie nowego typu danych o pożądanej strukturze kolumn.
- Grupuje jedną lub więcej kolumn, tworząc nowy typ danych
- Kolumny te będą miały 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 przyjąć wartość dla jednej konkretnej kolumny rekordu
- Typ rekordu oznacza po prostu nowy typ danych. Po utworzeniu typu rekordu zostanie on zapisany jako nowy typ danych w bazie danych i ten sam typ danych będzie wykorzystany do zadeklarowania zmiennej w programach.
- Będzie używać słowa kluczowego 'TYP' poinstruować kompilator, że tworzy nowy typ danych.
- Można go utworzyć w „poziom bazy danych” które mogą być przechowywane jako obiekty bazy danych, używane w całej bazie danych lub mogą być tworzone w „poziomy podprogramów”, który jest widoczny tylko wewnątrz podprogramów.
- Typ rekordu na poziomie bazy danych można również zadeklarować dla kolumn tabeli, tak aby pojedyncza kolumna mogła przechowywać złożone dane.
- Do danych w tym typie danych można uzyskać dostęp, odwołując się do ich zmiennej_nazwy, po której następuje operator okresu (.) i nazwa_kolumny, tj. . '
Składnia deklaracji na poziomie bazy danych:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
W pierwszej składni widzimy słowo kluczowe „CREATE TYPE”, które instruuje kompilator, aby utworzył typ rekordu o nazwie „nazwa_typu_db” z określoną kolumną jako obiektem bazy danych.
Jest to podawane jako osobna instrukcja, a nie wewnątrz żadnego bloku.
Składnia deklaracji na poziomie podprogramu:
DECLARE TYPE <type_name> IS RECORD ( <columnl> <datatype>, ); BEGIN <execution_section>; END;
W składni typ rekordu o nazwie „nazwa_typu” tworzymy tylko wewnątrz podprogramu.
W obu metodach deklaracji sposób definiowania kolumny i typu danych jest podobny.
Przykład 1: Typ RECORD jako obiekt bazy danych
W tym programie zobaczymy, jak utworzyć „typ rekordu” jako obiekt bazy danych. Zamierzamy utworzyć typ rekordu „emp_det” z czterema kolumnami. Kolumny i ich typy danych są następujące:
- 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
Wyjaśnienie kodu:
- Powyższy kod utworzy typ emp_det jako obiekt bazy danych.
- Będzie miał 4 kolumny emp_no, emp_name, menadżer i wynagrodzenie zgodnie z definicją.
- Teraz „emp_det” jest podobny do innych typ danych (jak NUMBER, VARCHAR@ itp.) I jest to widoczne w całej bazie danych. Można więc tego użyć w całej bazie danych do zadeklarowania zmiennej tego typu.
Wyjście:
Utworzono typ „emp_det” jako typ rekordu na poziomie bazy danych.
Przykład 2: Typ rekordu na poziomie podprogramu – dostęp na poziomie kolumny
W tym przykładzie zobaczymy, jak utworzyć typ rekordu na poziomie podprogramu oraz jak wypełnić i pobrać z niego wartości na poziomie kolumny.
Stworzymy „emp_det” record_type na poziomie podprogramu i będziemy go używać do zapełniania i wyświetlania z niego 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
Wyjaśnienie kodu:
- Linia kodu 2-8: Typ rekordu „emp_det” jest deklarowany z kolumnami emp_no, emp_name, pay i manager typu danych NUMBER, VARCHAR2, NUMBER, NUMBER.
- Linia kodu 9: Zmienna guru99_emp_rec jest zadeklarowana jako typ danych „emp_det”. Teraz to zmienna może przechowywać wartość zawierającą wszystkie powyższe 4 pola/kolumny.
- Linia kodu 11: Wypełnianie pola „emp_no” w „guru99_emp_rec” wartością 1001.
- Linia kodu 12: Wypełnianie pola „emp_name” w „guru99_emp_rec” wartością XXX.
- Linia kodu 13: Wypełnianie pola „manager” w „guru99_emp_rec” wartością 1000.
- Linia kodu 14: Wypełnianie pola „wynagrodzenie” w „guru99_emp_rec” wartością 10000.
- Linia kodu 15-19: Wyświetlanie wartości „guru99_emp_rec” na wyjściu.
Przykład 3: Typ rekordu na poziomie podprogramu – dostęp na poziomie wiersza
W tym przykładzie zobaczymy, jak utworzyć typ rekordu na poziomie podprogramu i jak wypełnić go na poziomie wiersza. Stworzymy „emp_det” record_type na poziomie podprogramu i będziemy go używać do zapełniania i wyświetlania z niego danych.
DECLARE TYPE emp_det IS RECORD ( EMP_NO NUMBER, EMP_NAME YARCHAR2( 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; /
Wyjaśnienie kodu:
- Linia kodu 2-8: Typ rekordu „emp_det” jest deklarowany z kolumnami emp_no, emp_name, pay i manager typu danych NUMBER, VARCHAR2, NUMBER, NUMBER.
- Linia kodu 9: Zmienna guru99_emp_rec jest zadeklarowana jako typ danych „emp_det”. Teraz ta zmienna może przechowywać wartość zawierającą wszystkie powyższe 4 pola/kolumny.
- Linia kodu 11: Wypełnianie tabeli emp danymi 1002 jako nr_empa, YYY jako nazwa_emp, 15000 jako wynagrodzenie i 1000 jako numer menedżera.
- Linia kodu 12: Zatwierdzenie powyższej transakcji wstawiania.
- Linia kodu 13: Wypełnianie zmiennej „guru99_emp_rec” jako danych na poziomie wiersza z zapytania wybierającego dla pracownika o numerze 1002.
- Linia kodu 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 można uzyskać tylko na poziomie kolumny, przekierowując jego wartość do dowolnego trybu wyjściowego.