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:

Oracle Typ rekordu PL/SQL

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:

Oracle Typ rekordu PL/SQL

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.

Oracle Typ rekordu PL/SQL

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.

Oracle Typ rekordu PL/SQL

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.