Oracle Typy obiektów PL/SQL: CREATE TYPE z przykładami

⚡ Inteligentne podsumowanie

Typy obiektów w PL/SQL wprowadzają programowanie obiektowe Oracle, umożliwiając modelowanie rzeczywistych bytów za pomocą atrybutów i metod. Obsługują one konstruktory, dziedziczenie i porównywanie równości, dzięki czemu jeden typ na poziomie schematu może przechowywać i przetwarzać ustrukturyzowane dane.

  • 🧱 Komponenty typu obiektu: Typ obiektu łączy atrybuty przechowujące dane i elementy, czyli metody, które definiują logikę przetwarzania.
  • 🏗️. Utwórz obiekt: Typy obiektów tworzy się na poziomie schematu za pomocą polecenia CREATE TYPE, a ich metody definiuje się w osobnym poleceniu CREATE TYPE BODY.
  • 🔧 Konstruktorzy: Każdy typ obiektu ma niejawny konstruktor o nazwie odpowiadającej typowi. Można także zdefiniować jawny konstruktor w celu ustawienia wartości domyślnych.
  • 🧬 Dziedzictwo: Typ nadrzędny NOT FINAL jest rozszerzany za pomocą UNDER, więc podtyp dziedziczy wszystkie atrybuty i elementy nadrzędne.
  • ⚖️. Równość: Funkcja członkowska ORDER porównuje dwa wystąpienia obiektów i zwraca liczbę ujemną, zero lub dodatnią.
  • 🤖 Pomoc AI: Asystenci AI, tacy jak GitHub Copilot, tworzą definicje CREATE TYPE, konstruktory i metody ORDER na podstawie komentarza.

Oracle Typy obiektów PL/SQL pokazujące polecenie CREATE TYPE z atrybutami i metodami

Co to jest typ obiektu w PL/SQL?

Programowanie obiektowe jest szczególnie przydatne do tworzenia komponentów wielokrotnego użytku i złożonych aplikacji. Programy są zorganizowane wokół „obiektów”, a nie „akcji”; co oznacza, że ​​są zaprojektowane do pracy i interakcji z całym obiektem, a nie z pojedynczą akcją. Takie podejście pozwala programiście na wypełnianie i manipulowanie szczegółami na poziomie obiektu-jednostki.

Poniższy rysunek przedstawia przykład typu obiektu, w którym konto bankowe jest traktowane jako encja obiektu. Atrybuty obiektu przechowują wartości – w przypadku konta bankowego są to numer konta, saldo konta itd. – natomiast metody obiektu opisują czynności, takie jak obliczanie stopy procentowej czy generowanie wyciągu bankowego, z których każda wymaga wykonania określonego procesu.

Konto bankowe modelowane jako typ obiektu z atrybutami i metodami w PL/SQL

In PL / SQLProgramowanie obiektowe opiera się na typach obiektów. Typ obiektu może reprezentować dowolny byt ze świata rzeczywistego. Poniższe sekcje omawiają typy obiektów, ich komponenty oraz sposób ich tworzenia i używania.

Składniki typów obiektów

Typ obiektu PL/SQL składa się głównie z dwóch komponentów.

  1. Atrybuty
  2. Członkowie/Metody

Atrybuty

Atrybuty to kolumny lub pola, w których przechowywane są dane. Każdy atrybut jest mapowany na typ danych, który definiuje sposób przetwarzania i przechowywania tego atrybutu. Atrybut może mieć dowolny prawidłowy typ. Typ danych PL/SQLlub może należeć do innego typu obiektu.

Członkowie/Metody

Członkowie lub metody są podprogramy Zdefiniowane wewnątrz typu obiektu. Nie służą do przechowywania danych; zamiast tego definiują przetwarzanie wykonywane wewnątrz typu obiektu — na przykład walidację danych przed wypełnieniem obiektu. Są deklarowane w specyfikacji typu obiektu i definiowane w treści typu obiektu. Treść jest opcjonalna: jeśli nie ma żadnych elementów, typ obiektu nie ma części treści.

Utwórz obiekt w Oracle

Typu obiektu nie można utworzyć na poziomie podprogramu; można go utworzyć wyłącznie na poziomie schematu. Po zdefiniowaniu typu obiektu w schemacie można go używać w podprogramach. Typ obiektu tworzy się za pomocą polecenia „CREATE TYPE”, a treść typu można utworzyć dopiero po zaistnieniu jego typu obiektu.

Poniższe zrzuty ekranu pokazują składnię polecenia CREATE TYPE dla specyfikacji obiektu i składnię polecenia CREATE TYPE BODY definiującą jego metody.

Składnia polecenia CREATE TYPE definiująca specyfikację obiektu z atrybutami w Oracle Składnia CREATE TYPE BODY definiująca metody typu obiektu PL/SQL

CREATE TYPE<object_type_name> AS OBJECT
(
<attribute_l><datatype>,
.
.
);
/
CREATE TYPE BODY<object_type_name> AS OBJECT
(
MEMBER[PROCEDURE|FUNCTION]<member_name> 
IS
<declarative section>
BEGIN
<execution part>
END;
.
.
);
/

Wyjaśnienie składni:

  • Powyższa składnia pokazuje tworzenie OBIEKTU z atrybutami i CIAŁA OBIEKTU z metodami.
  • Metody mogą być również przeciążone w treści obiektu.

Deklaracja Inicjalizacja typu obiektu

Podobnie jak inne komponenty w PL/SQL, typy obiektów muszą zostać zadeklarowane przed użyciem w programie. Po utworzeniu typu obiektu można go użyć w sekcji deklaratywnej podprogramu, aby zadeklarować zmienną tego typu obiektu.

Za każdym razem, gdy zmienna jest deklarowana jako typ obiektu, w czasie wykonywania tworzona jest nowa instancja tego typu obiektu, a do tej nowo utworzonej instancji odwołuje się nazwa zmiennej. W ten sposób jeden typ obiektu może przechowywać wiele wartości w różnych instancjach.

Poniższy zrzut ekranu przedstawia deklarację zmiennej jako typu obiektu wewnątrz Blok PL/SQL.

Deklarowanie zmiennej typu obiektu w sekcji deklaratywnej bloku PL/SQL

DECLARE
<variable_name> <object_type_name>;
BEGIN
.
.
END;
/

Wyjaśnienie składni:

  • Powyższa składnia pokazuje deklarację zmienna jako typ obiektu w sekcji deklaratywnej.

Po zadeklarowaniu zmiennej jako typu obiektu w podprogramie, jest ona atomowo nullem – cały obiekt jest nullem. Musi zostać zainicjowana wartościami, zanim będzie mogła zostać użyta w programie. Obiekty są inicjowane za pomocą konstruktorów.

Konstruktory to niejawne metody obiektu, do których można odwoływać się, używając tej samej nazwy co typ obiektu. Poniższy zrzut ekranu przedstawia inicjalizację instancji typu obiektu.

Inicjowanie instancji typu obiektu do wartości null za pomocą jego konstruktora

DECLARE
<variable_name> <object_type_name>; 
BEGIN
<variable_name>:=<object_type_name>();
END;
/

Wyjaśnienie składni:

  • Powyższa składnia pokazuje inicjalizację instancji typu obiektu wartością pustą.
  • Sam obiekt nie jest już nullem po zainicjowaniu, ale atrybuty wewnątrz obiektu pozostają nullem, dopóki nie zostaną im przypisane wartości.

Konstruktorzy

Konstruktory to niejawne metody obiektu, do których można się odwoływać, używając tej samej nazwy co typ obiektu. Za każdym razem, gdy odwołujemy się do obiektu po raz pierwszy, ten konstruktor jest wywoływany niejawnie.

Można również inicjować obiekty za pomocą tych konstruktorów. Konstruktor można zdefiniować jawnie, definiując element w ciele typu obiektu o tej samej nazwie co typ obiektu.

1 przykład: W poniższym przykładzie używamy elementu typu object do wstawiania rekordów do tabeli emp z wartościami („RRR”, 1005, 20000, 1000) i („PPP”, 1006, 20000, 1001). Po wstawieniu danych wyświetlamy je za pomocą elementu typu object. Używamy również jawnego konstruktora, aby wypełnić identyfikator menedżera wartością domyślną 1001 dla drugiego rekordu.

Wykonujemy to w następujących krokach.

  • Krok 1: Utwórz typ obiektu i treść typu obiektu.
  • Krok 2: Utwórz anonimowy blok, aby wywołać typ obiektu poprzez niejawny konstruktor dla emp_no 1005.
  • Krok 3: Utwórz anonimowy blok, aby wywołać typ obiektu poprzez jawny konstruktor dla emp_no 1006.

Krok 1) Utwórz typ obiektu i treść typu obiektu.

Poniższy zrzut ekranu pokazuje specyfikację typu obiektu emp_object, która jest tworzona wraz z jej atrybutami i elementami.

Tworzenie specyfikacji typu obiektu emp_object z atrybutami i członkami

CREATE TYPE emp_object AS OBJECT(
emp_no NUMBER,
emp_name VARCHAR2(50),
salary NUMBER,
manager NUMBER,
CONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER, p_emp_name VARCHAR2,
p_salary NUMBER) RETURN SELF AS RESULT),
MEMBER PROCEDURE insert_records,
MEMBER PROCEDURE display_records);
/

Poniższy zrzut ekranu pokazuje, jak tworzony jest typ emp_object za pomocą jawnego konstruktora i procedur członkowskich.

Definiowanie ciała typu emp_object za pomocą jawnego konstruktora i procedur członkowskich

CREATE OR REPLACE TYPE BODY emp_object AS
CONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER,p_emp_name VARCHAR2,
p_salary NUMBER)
RETURN SELF AS RESULT
IS
BEGIN
Dbms_output.put_line('Constructor fired..');
SELF.emp_no:=p_emp_no;
SELF.emp_name:=p_emp_name;
SELF.salary:=p_salary;
SELF.manager:=1001;
RETURN;
END;
MEMBER PROCEDURE insert_records
IS
BEGIN
INSERT INTO emp VALUES(emp_no,emp_name,salary,manager);
END;
MEMBER PROCEDURE display_records
IS
BEGIN
Dbms_output.put_line('Employee Name:'||emp_name);
Dbms_output.put_line('Employee Number:'||emp_no);
Dbms_output.put_line('Salary:'||salary);
Dbms_output.put_line('Manager:'||manager);
END;
END;
/

Code Wyjaśnienie

  • Code wiersz 1-9: Tworzenie typu obiektu „emp_object” z 4 atrybutami i 3 elementami. Zawiera on definicję konstruktora z zaledwie 3 parametrami. (Rzeczywisty konstruktor niejawny zawiera liczbę parametrów równą liczbie atrybutów obecnych w typie obiektu).
  • Code linia 10: Tworzenie treści typu.
  • Code wiersz 11-21: Zdefiniowanie jawnego konstruktora. Przypisanie wartości parametrów do atrybutów i przypisanie atrybutowi „manager” wartości domyślnej „1001”.
  • Code wiersz 22-26: Definiowanie elementu „insert_records”, w którym wartości atrybutów są wstawiane do tabeli „emp”.
  • Code wiersz 27-34: Zdefiniowanie elementu „display_records”, który wyświetla wartości atrybutów typu obiektu.

Wyjście:

Typ utworzony

Utworzono treść typu

Krok 2) Utworzenie anonimowego bloku do wywołania utworzonego typu obiektu poprzez niejawny konstruktor dla emp_no 1005.

Poniższy zrzut ekranu pokazuje anonimowy blok, który wywołuje emp_object poprzez niejawny konstruktor.

Anonimowy blok wywołujący emp_object przez niejawny konstruktor dla emp_no 1005

DECLARE
guru_emp_det emp_object;
BEGIN
guru_emp_det:=emp_object(1005,'RRR',20000,1000);
guru_emp_det.display_records;
guru_emp_det.insert_records;
COMMIT;
END;

Code Wyjaśnienie

  • Code wiersz 37-45: Wstawianie rekordów za pomocą niejawnego konstruktora. Wywołanie konstruktora zawiera rzeczywistą liczbę wartości atrybutów.
  • Code linia 38: Deklaruje „guru_emp_det” jako typ obiektu „emp_object”.
  • Code linia 41: Polecenie „guru_emp_det.display_records” wywołuje element „display_records”, a wartości atrybutów zostają wyświetlone.
  • Code linia 42: Instrukcja „guru_emp_det.insert_records” wywołuje element „insert_records”, a wartości atrybutów są wstawiane do tabeli. Następnie blok zatwierdza transakcja.

Wyjście:

Nazwisko pracownika: RRR

Numer pracownika: 1005

Wynagrodzenie: 20000 XNUMX

Menedżer: 1000

Krok 3) Utworzenie anonimowego bloku do wywołania utworzonego typu obiektu poprzez jawny konstruktor dla emp_no 1006.

Poniższy zrzut ekranu pokazuje anonimowy blok, który wywołuje emp_object poprzez jawny konstruktor z trzema argumentami.

Anonimowy blok wywołujący emp_object przez jawny konstruktor dla emp_no 1006

DECLARE
guru_emp_det emp_object;
BEGIN
guru_emp_det:=emp_object(1006,'PPP',20000);
guru_emp_det.display_records;
guru_emp_det.insert_records;
COMMIT;
END;
/

Wydajność

Employee Name:PPP 
Employee Number:1006 
Salary:20000 
Manager:1001

Code Wyjaśnienie:

  • Code wiersz 46-53: Wstawianie rekordu przy użyciu jawnego konstruktora.
  • Code linia 46: Deklaruje „guru_emp_det” jako typ obiektu „emp_object”.
  • Code linia 50: Polecenie „guru_emp_det.display_records” wywołuje element „display_records”, a wartości atrybutów zostają wyświetlone.
  • Code linia 51: Instrukcja „guru_emp_det.insert_records” wywołuje element „insert_records”, a wartości atrybutów są wstawiane do tabeli. Ponieważ przekazywane są tylko trzy argumenty, jawny konstruktor ustawia identyfikator menedżera na wartość domyślną 1001.

Dziedziczenie typu obiektu

Właściwość dziedziczenia pozwala typowi podobiektu na dostęp do wszystkich atrybutów i elementów typu nadrzędnego obiektu lub typu obiektu nadrzędnego.

Typ podobiektu nazywany jest dziedziczonym typem obiektu, a typ nadrzędnego typu obiektu – nadrzędnym typem obiektu. Poniższa składnia pokazuje, jak tworzyć nadrzędne i dziedziczone typy obiektów. Poniższy zrzut ekranu przedstawia składnię typu nadrzędnego (SUPER) oznaczoną jako NOT FINAL.

Składnia CREATE TYPE dla typu obiektu nadrzędnego NOT FINAL używanego w dziedziczeniu

CREATE TYPE <object_type_name_parent> AS OBJECT
(
<attribute_l><datatype>,
.
.
)NOT FINAL;
/

Wyjaśnienie składni:

  • Powyższa składnia pokazuje tworzenie typu SUPER. Klauzula NOT FINAL umożliwia dziedziczenie typu.

Poniższy zrzut ekranu pokazuje składnię typu dziedziczonego (SUB) utworzoną za pomocą słowa kluczowego UNDER.

Składnia CREATE TYPE UNDER dla typu podobiektu dziedziczącego po obiekcie nadrzędnym

CREATE TYPE<object_type_name_sub>UNDER<object_type_name_parent>
(
<attribute_l><datatype>,
.
);
/

Wyjaśnienie składni:

  • Powyższa składnia pokazuje tworzenie typu SUB. Zawiera on wszystkie elementy i atrybuty z nadrzędnego typu obiektu.

1 przykład: W poniższym przykładzie używamy właściwości dziedziczenia, aby wstawić rekord o identyfikatorze menedżera „1002” dla rekordu („RRR”, 1007, 20000). Wykonujemy program w następujących krokach.

  • Krok 1: Utwórz typ SUPER.
  • Krok 2: Utwórz typ i treść SUB.
  • Krok 3: Utwórz anonimowy blok, aby wywołać typ SUB.

Krok 1) Utwórz typ SUPER lub typ nadrzędny.

Poniższy zrzut ekranu pokazuje nadtyp emp_object tworzony za pomocą klauzuli NOT FINAL.

Tworzenie typu nadrzędnego emp_object NOT FINAL dla przykładu dziedziczenia

CREATE TYPE emp_object AS OBJECT(
emp_no NUMBER,
emp_name VARCHAR2(50),
salary NUMBER,
manager NUMBER,
CONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER,p_emp_name VARCHAR2(50),
p_salary NUMBER)RETURN SELF AS RESULT),
MEMBER PROCEDURE insert_records,
MEMBER PROCEDURE display_records)NOT FINAL;
/

Code Wyjaśnienie:

  • Code wiersz 1-9: Tworzenie typu obiektu „emp_object” z 4 atrybutami i 3 elementami. Zawiera on definicję konstruktora z zaledwie 3 parametrami. Został zadeklarowany jako „NIEKOŃCOWY”, więc jest typem nadrzędnym.

Krok 2) Utwórz typ SUB w typie SUPER.

Poniższy zrzut ekranu pokazuje odziedziczony typ sub_emp_object i jego treść, która jest tworzona.

Tworzenie dziedziczonego typu sub_emp_object i jego treści za pomocą insert_default_mgr

CREATE OR REPLACE TYPE sub_emp_object 
UNDER emp_object
(default_manager NUMBER,MEMBER PROCEDURE insert_default_mgr);
/


CREATE OR REPLACE TYPE BODY sub_emp_object 
AS
MEMBER PROCEDURE insert_default_mgr 
IS
BEGIN
INSERT INTO emp
VALUES(emp_no,emp_name,salary,manager);
END;
END;
/

Code Wyjaśnienie:

  • Code wiersz 10-13: Utworzenie „sub_emp_object” jako typu dziedziczonego z jednym dodatkowym atrybutem „default_manager” i deklaracją procedury członkowskiej.
  • Code linia 14: Tworzenie treści dla odziedziczonego typu obiektu.
  • Code wiersz 16-21: Definiowanie procedury członkowskiej, która wstawia rekordy do tabeli „emp” z wartościami z typu obiektu SUPER, z wyjątkiem wartości „manager”. Jako wartość „manager” używana jest wartość „default_manager” z typu SUB.

Krok 3) Utworzenie anonimowego bloku do wywołania typu SUB.

Poniższy zrzut ekranu pokazuje anonimowy blok, który wywołuje typ SUB i wstawia domyślny identyfikator menedżera.

Anonimowy blok wywołujący typ sub_emp_object w celu wstawienia domyślnego identyfikatora menedżera

DECLARE
guru_emp_det sub_emp_object;
BEGIN
guru_emp_det:= sub_emp_object(1007,'RRR',20000,1000,1002);
guru_emp_det.insert_default_mgr;
COMMIT;
END;
/

Code Wyjaśnienie:

  • Code linia 25: Deklarowanie „guru_emp_det” jako typu „sub_emp_object”.
  • Code linia 27: Inicjalizacja obiektu za pomocą niejawnego konstruktora. Konstruktor ma 5 parametrów (4 atrybuty typu PARENT i 1 atrybut typu SUB). Ostatni parametr (1002) definiuje wartość atrybutu default_manager.
  • Code linia 28: Wywołanie członka 'insert_default_mgr' w celu wstawienia rekordu z domyślnym identyfikatorem menedżera przekazanym w konstruktorze.

Równość obiektów PL/SQL

Instancje obiektów należące do tego samego typu obiektu można porównywać pod kątem równości. W tym celu typ obiektu wymaga specjalnej metody o nazwie ORDER.

Ta metoda ORDER powinna być funkcją zwracającą typ liczbowy. Przyjmuje ona dwa parametry wejściowe (pierwszy parametr: identyfikator instancji obiektu własnego; drugi parametr: identyfikator instancji innego obiektu).

Porównywane są identyfikatory dwóch instancji obiektów, a wynik zwracany jest jako liczba.

  • Wartość dodatnia oznacza, że ​​instancja obiektu SELF jest większa od innej instancji.
  • Wartość ujemna oznacza, że ​​instancja obiektu SELF jest mniejsza od drugiej instancji.
  • Zero oznacza, że ​​instancja obiektu SELF jest równa drugiej instancji.
  • Jeżeli którakolwiek z instancji jest nullem, funkcja zwraca null.

Poniższy zrzut ekranu pokazuje składnię funkcji członkowskiej ORDER, która musi zostać uwzględniona w treści typu w celu sprawdzenia równości.

Składnia funkcji członkowskiej ORDER używana do porównywania instancji obiektów pod kątem równości

CREATE TYPE BODY<object_type_name_ 1>AS OBJECT
(
  ORDER MEMBER FUNCTION match(<parameter> object_type_name_ 1)
  RETURN INTEGER IS
  BEGIN
    IF <attribute_name>parameter <attribute_name>THEN
      RETURN -1; --any negative number will do
    ELSIF id>c.id THEN
      RETURN 1; --any positive number will do
    ELSE
      RETURN 0;
    END IF;
  END;
  .
  .
);
/

Wyjaśnienie składni:

  • Powyższa składnia pokazuje funkcję ORDER, która musi zostać uwzględniona w treści typu w celu sprawdzenia równości.
  • Parametr tej funkcji powinien być instancją tego samego typu obiektu.
  • Funkcję można wywołać jako „obj_instance_1.match(obj_instance_2)”, a wyrażenie to zwraca pokazaną wartość liczbową, gdzie obj_instance_1 i obj_instance_2 są instancjami typu obiektu.

1 przykład: W poniższym przykładzie porównujemy dwa obiekty. Tworzymy dwie instancje i porównujemy między nimi atrybut „wynagrodzenie”. Robimy to w dwóch krokach.

  • Krok 1: Utwórz typ obiektu i jego treść.
  • Krok 2: Utwórz blok anonimowy, aby porównać wystąpienia obiektów.

Krok 1) Tworzenie typu obiektu i jego treści.

Poniższe zrzuty ekranu pokazują specyfikację emp_object_equality i jej treść, która definiuje funkcję ORDER porównującą atrybut salary.

Tworzenie specyfikacji typu obiektu emp_object_equality z funkcją ORDER Definiowanie obiektu typu emp_object_equality porównującego atrybut wynagrodzenia

CREATE TYPE emp_object_equality AS OBJECT(
salary NUMBER,
ORDER MEMBER FUNCTION equals(c emp_object_equality)RETURN INTEGER);
/
CREATE TYPE BODY emp_object_equality AS
ORDER MEMBER FUNCTION equals(c emp_object_equality)RETURN INTEGER 
IS
BEGIN
IF salary<c.salary
THEN RETURN -1;
ELSIF salary>c.salary
THEN RETURN 1;
ELSE
RETURN 0;
END IF;
END;
END;
/

Code Wyjaśnienie:

  • Code wiersz 1-4: Tworzenie typu obiektu „emp_object_equality” z 1 atrybutem i 1 członkiem.
  • Code wiersz 6-16: Definiowanie funkcji ORDER, która porównuje atrybut „wynagrodzenie” instancji SELF i instancji parametru. Zwraca wartość ujemną, jeśli pensja SELF jest mniejsza, wartość dodatnią, jeśli pensja SELF jest większa, oraz 0, jeśli pensje są równe.

Code Wyjście:

Typ utworzony

Krok 2) Utworzenie anonimowego bloku w celu porównania wystąpień obiektów.

Poniższy zrzut ekranu pokazuje anonimowy blok porównujący dwie instancje emp_object_equality według wynagrodzenia.

Anonimowy blok porównujący dwie instancje emp_object_equality według pensji

DECLARE
l_obj_1 emp_object_equality;
l_obj_2 emp_object_equality;
BEGIN
l_obj_1:=emp_object_equality(15000); 
l_obj_2:=emp_object_equality(17000);
IF l_obj_1.equals(l_obj_2)>0
THEN
Dbms_output.put_line('Salary of first instance is greater');
ELSIF l_obj_1.equals(l_obj_2)<0
THEN
Dbms_output.put_line('Salary of second instance is greater'); 
ELSE
Dbms_output.put_line('Salaries are equal');
END IF;
END;
/

Wydajność

Salary of second instance is greater

Code Wyjaśnienie:

  • Code linia 20: Deklarowanie obiektu „l_obj_1” typu „emp_object_equality”.
  • Code linia 21: Deklarowanie obiektu „l_obj_2” typu „emp_object_equality”.
  • Code linia 23: Inicjowanie 'l_obj_1' wartością wynagrodzenia '15000'.
  • Code linia 24: Inicjowanie 'l_obj_2' wartością wynagrodzenia '17000'.
  • Code wiersz 25-33: Wydrukowanie komunikatu na podstawie liczby zwróconej przez funkcję ORDER.

FAQ

Typ obiektu modeluje pojedynczy byt ze świata rzeczywistego za pomocą atrybutów i metod. kolekcja — tablica VARRAY, zagnieżdżona tabela lub tablica asocjacyjna — przechowuje wiele elementów jednego typu danych. Typy obiektów opisują strukturę i zachowanie, podczas gdy kolekcje przechowują wiele wartości.

Obie metody porównują instancje obiektów. Metoda MAP zwraca pojedynczą wartość skalarną, która Oracle Służy do sortowania lub porównywania obiektów, podczas gdy metoda ORDER porównuje bezpośrednio dwie instancje i zwraca liczbę ujemną, zerową lub dodatnią. Typ może definiować jedną lub drugą, ale nie obie.

Tak. Możesz utworzyć tabelę obiektów, w której każdy wiersz jest instancją obiektu, lub użyć typu obiektu jako typu danych kolumny tabeli. Pozwala to Oracle utrwalaj obiekty strukturalne bezpośrednio w bazie danych, a nie tylko w pamięci.

Typ NIENATYCHMIASTOWY nie może tworzyć obiektów bezpośrednio; działa jako abstracPodstawa, którą rozszerzają inne typy. W połączeniu z NOT FINAL definiuje nadtyp, którego podtypy zapewniają konkretną implementację zadeklarowanych metod.

Użyj ALTER TYPE, aby dodać lub usunąć atrybuty i metody, dodaj CASCADE, aby zaktualizować obiekty zależne, i użyj DROP TYPE, aby usunąć typ. Typu nadal używanego przez tabele lub inne typy nie można usunąć, dopóki te obiekty zależne nie zostaną najpierw obsłużone.

Zapytaj widoki słownika danych USER_TYPES i ALL_TYPES o nazwy typów oraz USER_TYPE_ATTRS i USER_TYPE_METHODS o ich atrybuty i metody. Te widoki umożliwiają audyt istniejącego modelu obiektów bez konieczności czytania kodu źródłowego.

Tak. Drugi pilot GitHub tworzy specyfikacje CREATE TYPE, metody TYPE BODY, konstruktory i funkcje ORDER z komentarza. RevPrzed wdrożeniem wygenerowanego typu sprawdź typy danych atrybutów, parametry konstruktora i klauzule dziedziczenia.

Asystenci AI analizują Twoje tabele i sugerują typy obiektów oraz mapę atrybutówpings i hierarchie dziedziczenia. Ten przegląd uczenia maszynowego sygnalizuje nadmiarowe atrybuty, brakujące konstruktory i zbyt głębokie dziedziczenie, zanim model obiektów trafi do produkcji, co poprawia łatwość utrzymania.

Podsumuj ten post następująco: