Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak tworzyć tablice asocjacyjne w bazie danych Oracle

Tablice asocjacyjne były wcześniej znane jako tabele PL/SQL w PL/SQL 2 (wersja PL/SQL, która była dostarczana z Oracle 7) i indeks według tabeli w bazie danych Oracle 8. Po tabeli zagnieżdżonej i tablicach VARRAY tablica asocjacyjna jest trzecim typem kolekcji, który jest powszechnie używany przez programistów.

Poszukajmy odpowiedzi na kilka pytań dotyczących tablic asocjacyjnych, które pomogą Ci lepiej je zrozumieć. W tej sekcji poznasz również niektóre podstawowe różnice i podobieństwa między tablicą asocjacyjną a innymi kolekcjami, takimi jak VARRAY i tabele zagnieżdżone.

Czy tablice asocjacyjne są ograniczone czy nieograniczone?

Podobnie jak w przypadku tabel zagnieżdżonych, tablice asocjacyjne są nieograniczoną formą gromadzenia danych. Oznacza to, że nie ma górnej granicy liczby elementów, które może pomieścić. To samo nie dotyczy tablic VARRAY, ponieważ tablice zmiennych są z natury ograniczone.

Czy tablice asocjacyjne są trwałe czy nietrwałe?

W przeciwieństwie do tabel zagnieżdżonych i tablic VARRAY tablice asocjacyjne są nietrwałą formą gromadzenia danych . Oznacza to, że ani tablica, ani dane nie mogą być przechowywane w bazie danych, ale są one dostępne tylko w blokach PL/SQL.

Czy tablice asocjacyjne są rzadkie lub gęste?

Podczas gdy tablice VARRAY to gęsto zapełnione tablice, tabele zagnieżdżone i tablice asocjacyjne to tablice rzadko zapełnione co oznacza, że ​​numeracja w indeksie dolnym musi być niepowtarzalna, ale niekoniecznie sekwencyjna.

Czy możemy utworzyć tablicę asocjacyjną jako obiekt bazy danych?

Ze względu na ich nietrwały charakter Tablice asocjacyjne nie mogą być przechowywane w schemacie. Mogą być tworzone tylko w blokach PL/SQL, ale nie na poziomie schematu jako obiekt bazy danych.

Czy możemy ponownie użyć tablicy asocjacyjnej?

Jak wspomniano powyżej, tablica asocjacyjna jest nietrwałą kolekcją, której nie można utworzyć na poziomie schematu, dlatego nie można jej przechowywać w schemacie, dlatego nie można jej ponownie użyć.

Czy numeracja indeksu/numeracja indeksu dolnego w tablicy asocjacyjnej jest niejawna czy jawna?

W przeciwieństwie do tabel zagnieżdżonych i tablic VARRAY indeksowanie w tablicy asocjacyjnej jest jawne. Podczas gdy Oracle Engine przypisuje indeks dolny/numer indeksu do elementów tabeli zagnieżdżonej i kolekcji VARRAY niejawnie w tle, w tablicy asocjacyjnej użytkownicy muszą jawnie określić numer indeksu podczas wypełniania kolekcji.

W jaki sposób dane są przechowywane w tablicy asocjacyjnej?

Tablica asocjacyjna przechowuje dane w parach klucz-wartość, gdzie numer indeksu służy jako klucz, a dane przechowywane w komórce służą jako wartość.

Oto kilka podstawowych pytań, których możesz się spodziewać podczas egzaminu lub rozmowy kwalifikacyjnej. Czytaj dalej, aby poznać różnice techniczne między tablicami asocjacyjnymi a innymi kolekcjami.

Zdefiniować kolekcję PL/SQL — tablica asocjacyjna?
Korzystając z informacji uzyskanych z powyższych pytań, możemy zdefiniować tablice asocjacyjne jako jednowymiarowy, jednorodny zbiór, który przechowuje dane w parze klucz-wartość. Jest rzadki, nieograniczony i nietrwały z natury.

Jaka jest składnia tablicy asocjacyjnej PL/SQL?

TYPE aArray_name IS TABLE OF element_datatype [Not Null]
INDEX BY index_elements_datatype;

Jak wspomniano powyżej, tablica asocjacyjna jest nietrwałym typem kolekcji, dlatego nie można jej utworzyć jako samodzielny obiekt bazy danych, dlatego nie można jej ponownie wykorzystać, tak jak pozostałe kolekcje. Może być dostępny tylko w bloku PL/SQL. Zawsze upewnij się, że tworzysz tablicę asocjacyjną w sekcji DELCARATION bloku PL/SQL. [Przeczytaj tutaj, aby dowiedzieć się, ile sekcji znajduje się w bloku PL/SQL?] Zobaczmy szczegółowo składnię:

Typ :słowo kluczowe oznacza początek wyrażenia.

aArray_name :Nazwa tablicy asocjacyjnej. Jest całkowicie zdefiniowany przez użytkownika i zgodny z normami nazewnictwa bazy danych Oracle.

TO TABELA :Zastrzeżona fraza Oracle Database, za pomocą której użytkownik mówi kompilatorowi, jakiego typu elementy ma przechowywać tablica?

Element_Datatype :Typ danych elementów, które ma przechowywać tablica. W Oracle Database wszystkie kolekcje są z natury jednorodne, co oznacza, że ​​każdy element kolekcji musi mieć ten sam typ danych.

Nie_null :Opcjonalna klauzula, której użycie zapewnia, że ​​każdy indeks ma odpowiadającą mu wartość, a nie NULL.

INDEKS WG :Klauzula, za pomocą której użytkownik określa typ danych indeksu dolnego tablicy.

Index_elements_dataype :Typ danych elementów indeksu dolnego tablicy.

Przykład:jak utworzyć tablicę asocjacyjną w bazie danych Oracle?

Tablica asocjacyjna może być tworzona tylko wewnątrz bloku PL/SQL, dlatego jej zakres jest ograniczony do bloku, w którym została utworzona, co oznacza, że ​​nie można jej używać poza tym blokiem. Zobaczmy, jak utworzyć tablicę asocjacyjną w bazie danych Oracle?

Krok 1:Utwórz tablicę asocjacyjną

	SET SERVEROUTPUT ON;
	DECLARE
	    TYPE books IS TABLE OF NUMBER
	        INDEX BY VARCHAR2 (20);

W powyższym kodzie utworzyliśmy tablicę asocjacyjną o nazwie „Książki ’, który może zawierać elementy typu danych NUMBER i indeks dolny typu danych VARCHAR2.

Krok 2:Utwórz zmienną tablicy asocjacyjnej

Isbn Books;

Potrzebna jest zmienna tablicowa asocjacyjna do odwoływania się do tablicy w programie. Zmienną tablicową można bardzo łatwo utworzyć. Musisz tylko wpisać nazwę zmiennej (czyli „isbn” w naszym przypadku), która jest zdefiniowana przez użytkownika, po której następuje nazwa tablicy asocjacyjnej.

Krok 3:Wstaw dane do tablicy asocjacyjnej

Jak wspomniano powyżej, tablica asocjacyjna przechowuje dane w parach klucz-wartość. Tak więc w przeciwieństwie do pozostałych kolekcji, użytkownicy muszą wstawić zarówno indeks dolny tablicy (klucz), jak i dane.

BEGIN
-- How to insert data into the associative array 
isbn('Oracle Database') := 1234;
isbn('MySQL') := 9876; 

Podobnie jak zagnieżdżona tabela i VARRAY, wstawiamy dane do tablicy asocjacyjnej w sekcji wykonania bloku PL/SQL. Jeśli zauważyłeś tutaj, w przeciwieństwie do innych kolekcji, nie użyliśmy instrukcji INSERT DML do wstawiania danych, ale wstawiliśmy je za pomocą zmiennej tablicy „isbn” . Poniżej możesz zobaczyć składnię instrukcji insert dla tablicy asocjacyjnej przy użyciu zmiennej tablicowej.

Array_variable (subscript/key) := data; 

Jak widać, aby wstawić dane do tablicy asocjacyjnej, musisz najpierw wpisać nazwę zmiennej tablicowej, a następnie indeks tablicy, a następnie dane dla swojej tablicy.

Krok 4:Jak zaktualizować dane kolekcji – tablica asocjacyjna?

Aktualizowanie wartości tablicy asocjacyjnej jest tak proste, jak ich wstawianie. Jeśli chcesz zmienić jakąkolwiek wartość, napisz tę samą instrukcję, która jest używana do wstawiania ze zmodyfikowanymi wartościami. Na przykład powiedz, że chcesz zmienić wartość klucza MySQL z 9876 na 1010, a następnie po prostu napisz

	-- How to update data of associative array.	
	 	isbn('MySQL') := 1010; 

Ponownie nie musisz pisać UPDATE DML w celu aktualizacji wartości. Wystarczy użyć zmiennej tablicowej.

Krok 5:Jak pobrać dane z kolekcji — tablica asocjacyjna?

Tak jak nie potrzebujemy instrukcji Insert DML do wstawiania wartości lub Update DML do aktualizacji wartości, podobnie nie potrzebujemy Select DML do pobierania wartości.

Załóżmy, że chcesz zobaczyć wartość przechowywaną w kluczu „Baza danych Oracle”. W tym celu wystarczy napisać…

-- how to retrieve data using key from associative array.  	
	  DBMS_OUTPUT.PUT_LINE ('Value '||isbn ('Oracle Database'));

Połączmy wszystkie te fragmenty kodu w jeden program.

SET SERVEROUTPUT ON;
DECLARE
    TYPE books IS TABLE OF NUMBER
        INDEX BY VARCHAR2(20);
    isbn Books;
BEGIN
    	-- How to insert data into the associative array 
    	isbn('Oracle Database') := 1234;
    	isbn('MySQL') := 9876;
    	DBMS_OUTPUT.PUT_LINE('Value Before Updation '||isbn('MySQL'));

    	-- How to update data of associative array.
    	isbn('MySQL') := 1010;
    
-- how to retrieve data using key from associative array.  
    	DBMS_OUTPUT.PUT_LINE('Value After Updation '||isbn('MySQL'));
END;
/

Oto program z kilkoma drobnymi modyfikacjami. Powyższy program PL/SQL pokazuje, jak pobrać jedną konkretną wartość za pomocą klucza. Możesz obejrzeć samouczek wideo, aby dowiedzieć się, jak pobrać wszystkie wartości z tablicy asocjacyjnej za pomocą pętli. Tam wyjaśniłem to bardzo szczegółowo.

Przed zakończeniem tego samouczka jest kilka wskazówek, które powinieneś znać. Te wskaźniki to –

  • PL/SQL Associative Array obsługuje BINARY_INTEGER, PLS_INTEGER, POSITIVE, NATURAL, SIGNTYPE lub VARCHAR2 jako indeksowe typy danych.
  • RAW, NUMBER, LONG-ROW, ROWID i CHAR to nieobsługiwane indeksowe typy danych.

W przypadku typu danych elementu, kolekcja PL/SQL obsługuje tablicę asocjacyjną —

  • Skalarny typ danych PL/SQL :DATA, BLOB, CLOB, BOOLEAN lub NUMBER &VARCHAR2 z ich podtypami.
  • Dane wywnioskowane :Termin używany dla takich typów danych, które są dziedziczone z kolumny tabeli, wyrażenia kursora lub predefiniowanej zmiennej pakietu
  • Typ zdefiniowany przez użytkownika: Typ obiektu lub typ kolekcji, który jest zdefiniowany przez użytkownika.

To jest szczegółowy samouczek dotyczący kolekcji PL/SQL — tablica asocjacyjna. Ten samouczek obejmuje wszystkie tematy, których można się spodziewać podczas egzaminu certyfikacyjnego Oracle Database, a także podczas rozmowy kwalifikacyjnej. Mam nadzieję, że podobało Ci się czytanie.

Możesz pomóc innym w nauce czegoś nowego, a także pomóc nam w dotarciu do większej liczby osób, udostępniając ten blog w swoich sieciach społecznościowych. Nie zapomnij oznaczyć nas tagami, ponieważ uwielbiamy dawać głośne okrzyki wszystkim naszym wspierającym, widzom i subskrybentom. Dzięki i życzę miłego dnia!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Korzystanie z Oracle JDeveloper 12c z bazą danych Oracle, część 2

  2. Kolumna automatycznego przyrostu — sekwencja jako wartość domyślna w Oracle

  3. Kroki zmiany hasła administratora, które zostało utracone lub zapomniane w domenie EBS WebLogic R12.2

  4. Funkcja CHARTOROWID() w Oracle

  5. Dlaczego nie mogę używać zmiennych wiązania w instrukcjach DDL/SCL w dynamicznym SQL?