sql >> Databáze >  >> RDS >> Oracle

Jak vytvořit asociativní pole v databázi Oracle

Asociativní pole je dříve známé jako tabulky PL/SQL v PL/SQL 2 (verze PL/SQL, která přišla s Oracle 7) a Index-by-Table v databázi Oracle 8. Po Nested Table a VARRAY je Associative Array třetím typem kolekce, kterou vývojáři široce používají.

Pojďme zjistit odpovědi na několik otázek o asociativním poli, které vám pomohou lépe jim porozumět. V této sekci také najdete některé základní rozdíly a podobnosti mezi Associative Array a jinými kolekcemi, jako jsou VARRAY &Nested Tables.

Jsou asociativní pole omezená nebo neohraničená?

Podobně jako u vnořených tabulek jsou Asociativní pole neomezenou formou kolekce. To znamená, že neexistuje žádná horní hranice počtu prvků, které může obsahovat. Totéž neplatí pro VARRAY, protože pole proměnných jsou ve své podstatě omezená.

Jsou asociativní pole perzistentní nebo neperzistentní?

Na rozdíl od vnořených tabulek a VARRAY jsou asociativní pole neperzistentní formou kolekce . To znamená, že pole ani data nemohou být uložena v databázi, ale jsou dostupná pouze v PL/SQL blocích.

Jsou asociativní pole řídká nebo hustá?

Zatímco VARRAY jsou pole s vysokou hustotou, Vnořené tabulky a asociativní pole jsou pole s řídkým obsazením což znamená, že číslování indexu musí být jedinečné, ale ne nutně sekvenční.

Můžeme vytvořit asociativní pole jako databázový objekt?

Kvůli jejich neperzistentní povaze nelze asociativní pole uložit do schématu. Mohou být vytvořeny pouze v blocích PL/SQL, ale ne na úrovni schématu jako databázový objekt.

Můžeme znovu použít asociativní pole?

Jak je uvedeno výše Asociativní pole je neperzistentní kolekce, kterou nelze vytvořit na úrovni schématu, takže ji nelze uložit do schématu, a proto ji nelze znovu použít.

Je číslování indexu/číslování dolního indexu v asociativním poli implicitní nebo explicitní?

Na rozdíl od vnořených tabulek a VARRAY je indexování v asociativním poli explicitní. Tam, kde Oracle Engine přiřazuje dolní index/číslo indexu prvkům vnořené tabulky a kolekcím VARRAY implicitně na pozadí, musí uživatelé v asociativním poli při naplňování kolekce explicitně zadat číslo indexu.

Jak se data ukládají do asociativního pole?

Asociativní pole ukládá data v párech klíč–hodnota, kde indexové číslo slouží jako klíč a data uložená v buňce slouží jako hodnota.

Toto je několik základních otázek, které můžete očekávat u zkoušky nebo pohovoru. Přečtěte si dále a zjistěte technické rozdíly mezi asociativními poli a jinými kolekcemi.

Definovat kolekci PL/SQL – asociativní pole?
Pomocí informací odvozených z výše uvedených otázek můžeme definovat Asociativní pole jako jednorozměrnou, homogenní kolekci, která ukládá data do páru klíč-hodnota. Je řídké, neohraničené a nevytrvalé povahy.

Jaká je syntaxe asociativního pole PL/SQL?

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

Jak bylo uvedeno výše, Asociativní pole je neperzistentní typ kolekce, takže jej nelze vytvořit jako samostatný databázový objekt, a proto jej nelze znovu použít jako zbytek ostatních kolekcí. Může být k dispozici pouze v bloku PL/SQL. Vždy se ujistěte, že jste vytvořili své asociativní pole v sekci DELCARATION vašeho PL/SQL bloku. [Přečtěte si zde, kolik sekcí je v bloku PL/SQL?] Podívejme se podrobně na syntaxi:

Typ :Klíčové slovo označuje začátek příkazu.

aArray_name :Název asociativního pole. Je zcela uživatelsky definovaný a vyhovuje normám pro pojmenování databáze Oracle.

JE TABULKA :Oracle Database vyhrazená fráze, pomocí které uživatel sdělí kompilátoru, jaký typ prvků pole bude obsahovat?

Element_Datatype :Datový typ prvků, které pole bude obsahovat. V databázi Oracle jsou všechny kolekce svou povahou homogenní, což znamená, že každý prvek kolekce musí mít stejný datový typ.

Not_null :Nepovinná klauzule, která v případě použití zajišťuje, že každý index má odpovídající hodnotu, nikoli NULL.

INDEX BY :Klauzule, pomocí které uživatel určuje datový typ dolního indexu pole.

Index_elements_datatype :Datový typ prvků dolního indexu pole.

Příklad:Jak vytvořit asociativní pole v databázi Oracle?

Asociativní pole lze vytvořit pouze uvnitř bloku PL/SQL, takže jeho rozsah je omezen na blok, ve kterém je vytvořeno, což znamená, že jej nelze použít mimo tento blok. Podívejme se, jak vytvořit asociativní pole v databázi Oracle?

Krok 1:Vytvořte asociativní pole

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

Ve výše uvedeném kódu jsme vytvořili Asociativní pole s názvem „Knihy ’, který může obsahovat prvky NUMBER datových typů a dolní index datového typu VARCHAR2.

Krok 2:Vytvořte proměnnou asociativního pole

Isbn Books;

Pro odkazování na pole v programu potřebujete proměnnou asociativního pole. Proměnnou pole lze vytvořit velmi snadno. Stačí napsat název proměnné (což je ‚isbn‘ v našem případě), které je definováno uživatelem a za ním následuje název asociativního pole.

Krok 3:Vložte data do asociativního pole

Jak je uvedeno výše Asociativní pole uchovává data do párů klíč-hodnota. Na rozdíl od ostatních kolekcí tedy uživatelé musí vložit jak dolní index pole (klíč), tak data.

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

Stejně jako vnořené tabulky a VARRAY vkládáme data do Asociativního pole v sekci provádění bloku PL/SQL. Pokud jste si všimli, že na rozdíl od jiných kolekcí jsme pro vložení dat nepoužili příkaz INSERT DML, ale vložili jsme jej pomocí proměnné Array ‘isbn’ . Níže můžete vidět syntaxi příkazu insert pro asociativní pole pomocí proměnné pole.

Array_variable (subscript/key) := data; 

Jak vidíte, abyste mohli vložit data do asociativního pole, musíte nejprve napsat název proměnné pole, za ním dolní index pole a poté data pro vaše pole.

Krok 4:Jak aktualizovat data sběru – Asociativní pole?

Aktualizace hodnot Asociativního pole je stejně snadná jako jejich vložení. Pokud chcete změnit jakoukoli hodnotu, napište stejný příkaz, který se používá pro vložení s upravenými hodnotami. Řekněme například, že chcete změnit hodnotu proti klíči MySQL z 9876 na 1010, pak stačí napsat

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

Pro aktualizaci hodnot opět nemusíte psát UPDATE DML. Jednoduše použijete proměnnou pole.

Krok 5:Jak načíst data z kolekce – asociativní pole?

Stejně jako nepotřebujeme příkaz Insert DML pro vkládání hodnot nebo Update DML pro aktualizaci hodnot, podobně nepotřebujeme Select DML pro načítání hodnot.

Předpokládejme, že chcete vidět hodnotu uloženou v klíči ‚Oracle Database‘. K tomu stačí napsat…

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

Spojme všechny tyto části kódu do jediného programu.

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;
/

Zde je program s několika drobnými úpravami. Výše uvedený program PL/SQL ukazuje, jak získat jednu konkrétní hodnotu pomocí klíče. Můžete se podívat na video tutoriál, kde se dozvíte, jak získat všechny hodnoty z asociativního pole pomocí smyček. Tam jsem to vysvětlil velmi podrobně.

Před ukončením tohoto tutoriálu je několik tipů, které byste podle mě měli znát. Tyto ukazatele jsou –

  • PL/SQL Asociativní pole podporuje BINARY_INTEGER, PLS_INTEGER, POSITIVE, NATURAL, SIGNTYPE nebo VARCHAR2 jako datový typ indexu.
  • RAW, NUMBER, LONG-ROW, ROWID a CHAR jsou nepodporované indexové datové typy.

V případě datového typu prvku podporuje kolekce PL/SQL Asociativní pole –

  • Skalární datový typ PL/SQL :DATE, BLOB, CLOB, BOOLEAN nebo NUMBER &VARCHAR2 s jejich podtypy.
  • Odvozená data :Termín používaný pro takové datové typy, které jsou zděděny ze sloupce tabulky, kurzorového výrazu nebo předdefinované proměnné balíčku
  • Uživatelem definovaný typ: Typ objektu nebo typ kolekce, který je definován uživatelem.

To je podrobný tutoriál o PL/SQL Collection – Associative Array. Tento tutoriál pokrývá všechna témata, která můžete očekávat v certifikační zkoušce Oracle Database Certification Exam a také v Interview. Doufám, že se vám čtení líbilo.

Sdílením tohoto blogu na svých sociálních sítích můžete pomoci ostatním naučit se něco nového a také nám můžete pomoci oslovit více lidí. Nezapomeňte nás označit, protože rádi dáváme hlasité výkřiky všem našim příznivcům, divákům a odběratelům. Děkuji a přeji hezký den!


  1. Jak odstranit vedoucí mezery v MySQL

  2. SQL Server Update Trigger, získat pouze upravená pole

  3. Odstraňte primární klíč v MySQL

  4. Jak vytvořit přehled z tabulky v Accessu 2016