Typ rekordów Oracle PL / SQL z przykładami

Spisie treści:

Anonim

Co to jest typ rekordu?

Typ rekordu to złożony typ danych, który umożliwia programiście utworzenie nowego typu danych z żądaną strukturą kolumn.

  • Grupuje jedną lub więcej kolumn, tworząc nowy typ danych
  • Te kolumny 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 w bazie danych jako nowy typ danych i to samo zostanie użyte do zadeklarowania zmiennej w programach.
  • Użyje słowa kluczowego „TYPE”, aby poinstruować kompilator, że tworzy nowy typ danych.
  • Może być utworzony na „ poziomie bazy danych”, który może być przechowywany jako obiekty bazy danych, używany w całej bazie danych lub może być utworzony na „ poziomach podprogramów” , które są widoczne tylko wewnątrz podprogramów.
  • Typ rekordu na poziomie bazy danych można również zadeklarować dla kolumn tabeli, dzięki czemu w jednej kolumnie mogą znajdować się złożone dane.
  • Dostęp do danych w tym typie danych można uzyskać, odwołując się do ich nazwa_zmiennej, po której następuje operator kropki (.), Po którym następuje nazwa_kolumny, tj. „.

Składnia deklaracji na poziomie bazy danych:

CREATE TYPE  IS RECORD( ,);

W pierwszej składni możemy zobaczyć słowo kluczowe „CREATE TYPE”, które instruuje kompilator, aby utworzył typ rekordu o nazwie „type_name_db” z określoną kolumną jako obiektem bazy danych.

Jest to indywidualne oświadczenie, a nie w żadnym bloku.

Składnia deklaracji na poziomie podprogramu:

DECLARETYPE  IS RECORD( ,);BEGIN;END;

W składni tworzymy typ rekordu o nazwie „nazwa_typu” tylko wewnątrz podprogramu.

W obu metodach deklaracji sposób definiowania kolumny i typu danych jest podobny.

Przykład 1: RECORD Typ jako obiekt bazy danych

W tym programie zobaczymy, jak utworzyć „Typ rekordu” jako obiekt bazy danych. Utworzymy typ rekordu „emp_det” z czterema kolumnami. Kolumny i ich typy danych są następujące:

  • EMP_NO (NUMBER)
  • EMP_NAME (VARCHAR2 (150))
  • MANAGER (NUMBER)
  • WYNAGRODZENIE (LICZBA)
CREATE TYPE emp_det IS OBJECT(EMP_NO NUMBER,EMP_NAME VARCHAR2(150),MANAGER NUMBER,SALARY NUMBER);/
Wynik:
Type created

Objaśnienie kodu:

  • Powyższy kod utworzy typ emp_det jako obiekt bazy danych.
  • Będzie miał 4 kolumny emp_no, emp_name, menedżer i wynagrodzenie, zgodnie z definicją.
  • Teraz „emp_det” jest podobny do innego typu danych (np. NUMBER, VARCHAR @ itp.) I jest widoczny w całej bazie danych. Stąd można to wykorzystać w całej bazie danych do zadeklarowania zmiennej tego typu.

Wynik:

Utworzono typ „emp_det” jako typ rekordu na poziomie bazy danych.

Przykład 2: Typ rekordu na poziomie podprogramu - Dostęp z poziomu kolumny

W tym przykładzie zobaczymy, jak utworzyć typ rekordu na poziomie podprogramu oraz jak zapełniać i pobierać z niego wartości na poziomie kolumny.

Utworzymy „emp_det” typ_rekordu na poziomie podprogramu i użyjemy tego samego do zapełnienia i wyświetlenia z niego danych.

DECLARETYPE emp_det IS RECORD(EMP_NO NUMBER,EMP_NAME VARCHAR2(150),MANAGER NUMBER,SALARY NUMBER);guru99_emp_rec emp_det;BEGINguru99_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;/

Wynik:

Employee DetailEmployee Number: 1001Employee Name: XXXEmployee Salary: 10000Employee Manager Number: 1000

Objaśnienie kodu:

  • Linia kodu 2-8 : typ rekordu „emp_det” jest zadeklarowany w kolumnach emp_no, emp_name, wynagrodzenie i menedżer 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ść, która zawiera wszystkie powyższe 4 pola / kolumny.
  • Linia kodu 11: Wypełnienie pola „emp_no” elementu „guru99_emp_rec” wartością 1001.
  • Linia kodu 12: Wypełnianie pola „emp_name” elementu „guru99_emp_rec” wartością XXX.
  • Linia kodu 13: Wypełnienie pola „manager” elementu „guru99_emp_rec” wartością 1000.
  • Linia kodu 14: Wypełnianie pola „wynagrodzenie” wartości „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. Utworzymy „emp_det” typ_rekordu na poziomie podprogramu i użyjemy tego samego do zapełnienia i wyświetlenia z niego danych.

DECLARETYPE emp_det IS RECORD(EMP_NO NUMBER,EMP_NAME YARCHAR2( 150),MANAGER NUMBER,SALARY NUMBER);guru99_emp_rec emp_det;BEGININSERT 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;/

Objaśnienie kodu:

  • Linia kodu 2-8 : typ rekordu „emp_det” jest zadeklarowany w kolumnach emp_no, emp_name, wynagrodzenie i menedżer 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ść, która zawiera wszystkie powyższe 4 pola / kolumny.
  • Linia kodu 11: Wypełnianie tabeli emp danymi 1002 jako nr_p, YYY jako nazwa_pemp, 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 numer 1002.
  • Linia kodu 15-19: wyświetlanie wartości „guru99_emp_rec” na wyjściu.

Wynik:

Employee DetailEmployee Number: 1002Employee Name: YYYEmployee Salary: 1000Employee Manager Number: 15000

Uwaga: Typ rekordu jest dostępny tylko na poziomie kolumny podczas przekierowywania jego wartości do dowolnego trybu wyjściowego.