Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да създадете асоциативни масиви в базата данни на Oracle

Асоциативният масив е известен преди като PL/SQL таблици в PL/SQL 2 (версия PL/SQL, която идва с Oracle 7) и индекс по таблица в Oracle 8 Database. След вложената таблица и VARRAY, асоциативният масив е третият тип колекция, която се използва широко от разработчиците.

Нека разберем отговорите на няколко въпроса за асоциативния масив, които биха ви помогнали да ги разберете по-добре. В този раздел ще откриете и някои от основните разлики и прилики между асоциативен масив и други колекции като VARRAY и вложени таблици.

Ограничени ли са асоциативните масиви или неограничени?

Подобно на вложените таблици, Асоциативните масиви са неограничена форма на колекция. Това означава, че няма горна граница за броя на елементите, които може да съдържа. Същото не важи и за VARRAY, тъй като масивите с променливи са ограничени по природа.

Асоциативните масиви постоянни ли са или непостоянни?

За разлика от вложената таблица и VARRAY, Асоциативните масиви са непостоянна форма на колекция . Това означава, че нито масивът, нито данните могат да се съхраняват в базата данни, но са налични само в PL/SQL блокове.

Асоциативните масиви редки ли са или плътни?

Докато VARRAY са гъсто населени масиви, вложените таблици и асоциативните масиви са рядко населени масиви което означава, че номерирането на индекси трябва да е уникално, но не непременно последователно.

Можем ли да създадем асоциативен масив като обект на база данни?

Поради тяхната непостоянна природа асоциативните масиви не могат да се съхраняват в схемата. Те могат да се създават само в PL/SQL блокове, но не и на ниво схема като обект на база данни.

Можем ли да използваме повторно асоциативен масив?

Както бе споменато по-горе Асоциативният масив е непостоянна колекция, която не може да бъде създадена на ниво схема, следователно не може да бъде съхранена в схемата, следователно не може да бъде използвана повторно.

Номерирането на индекса/Номерирането на подиндекса в асоциативен масив имплицитно ли е или изрично?

За разлика от вложените таблици и VARRAY, индексирането в асоциативния масив е изрично. Когато Oracle Engine присвоява индекс/индекс номер на елементите на вложената таблица и колекциите VARRAY имплицитно във фонов режим, в асоциативния масив потребителите трябва да посочат изрично номера на индекса, докато попълват колекцията.

Как данните се съхраняват в асоциативния масив?

Асоциативният масив съхранява данни в двойки ключ-стойност, където индексният номер служи като ключ, а данните, съхранявани в клетката, служат като стойност.

Това са няколко основни въпроса, които можете да очаквате на вашия изпит или интервю. Прочетете, за да разберете техническите разлики между асоциативните масиви и други колекции.

Дефиниране на PL/SQL колекция – Асоциативен масив?
Използвайки информацията, извлечена от горните въпроси, можем да дефинираме асоциативните масиви като едномерна, хомогенна колекция, която съхранява данни в двойка ключ-стойност. Той е рядък, неограничен и непостоянен по природа.

Какъв е синтаксисът на PL/SQL асоциативен масив?

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

Както беше казано по-горе Асоциативният масив е непостоянен тип колекция, така че не може да бъде създаден като самостоятелен обект на база данни, следователно не може да бъде използван повторно като останалите други колекции. Може да бъде наличен само в PL/SQL блок. Винаги се уверете, че създавате своя асоциативен масив в секцията DELCARATION на вашия PL/SQL блок. [Прочетете тук, за да разберете колко секции има в блока PL/SQL?] Нека да видим синтаксиса в подробности:

Тип :Ключова дума маркира началото на изявлението.

aArray_name :Име на асоциативния масив. Той е напълно дефиниран от потребителя и отговаря на нормите за именуване на Oracle Database.

ТАБЛИЦА НА :Резервирана фраза в Oracle Database, използвайки кой потребител казва на компилатора какъв тип елементи ще задържи масивът?

Element_Datatype :Тип данни на елементите, които масивът ще съдържа. В Oracle Database всички колекции са хомогенни по природа, което означава, че всеки елемент от колекцията трябва да бъде от един и същ тип данни.

Не_нулева :Незадължителна клауза, която, ако се използва, гарантира, че всеки индекс има стойност, съответстваща на него, а не NULL.

ИНДЕКС ПО :Клауза, използваща кой потребител определя типа данни на индекса на масива.

Index_elements_dataype :Тип данни на елементите на индекса на масива.

Пример:Как да създадете асоциативен масив в базата данни на Oracle?

Асоциативният масив може да бъде създаден само вътре в PL/SQL блок, така че неговият обхват е ограничен до блока, в който е създаден, което означава, че не може да се използва извън този блок. Нека видим как да създадем асоциативен масив в базата данни на Oracle?

Стъпка 1:Създайте асоциативен масив

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

В горния код създадохме асоциативен масив с името „Книги ’, който може да съдържа елементи от NUMBER типове данни и индекс на VARCHAR2 тип данни.

Стъпка 2:Създайте асоциативен масив променлива

Isbn Books;

Имате нужда от асоциативна променлива на масива за препращане към масива в програмата. Променливата на масива може да се създаде много лесно. Просто трябва да напишете името на променливата (което е „isbn“ в нашия случай), който е дефиниран от потребителя, последван от името на асоциативния масив.

Стъпка 3:Вмъкнете данни в асоциативния масив

Както бе споменато по-горе Асоциативният масив съдържа данни в двойки ключ-стойност. По този начин, за разлика от останалите колекции, потребителите трябва да вмъкнат както индекса на масива (ключа), така и данните.

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

Подобно на вложената таблица и VARRAY, ние вмъкваме данни в асоциативния масив в секцията за изпълнение на блока PL/SQL. Ако сте забелязали тук за разлика от други колекции, ние не използвахме оператора INSERT DML за вмъкване на данните, а го вмъкнахме с помощта на променливата Array „isbn“ . По-долу можете да видите синтаксиса на израза за вмъкване за асоциативен масив, използващ променлива на масив.

Array_variable (subscript/key) := data; 

Както можете да видите, за да вмъкнете данните в асоциативния масив, първо трябва да напишете името на променливата на масива, последвано от индекса на масива и след това данните за вашия масив.

Стъпка 4:Как да актуализирам данните за събиране – Асоциативен масив?

Актуализирането на стойностите на асоциативния масив е толкова лесно, колкото и вмъкването им. Ако искате да промените която и да е стойност, напишете същия израз, който се използва за вмъкване с променените стойности. Например кажете, че искате да промените стойността спрямо ключа MySQL от 9876 на 1010, след което просто пишете

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

Отново не е необходимо да пишете UPDATE DML за актуализиране на стойностите. Просто използвате променливата на масива.

Стъпка 5:Как да извлечем данни от масива Collection-Asociative?

Точно както не се нуждаем от инструкция Insert DML за вмъкване на стойности или Update DML за актуализиране на стойности, по подобен начин не се нуждаем от Select DML за извличане на стойности.

Да предположим, че искате да видите стойността, съхранена срещу ключа „Oracle Database“. За това просто трябва да напишете...

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

Нека комбинираме всички тези парчета код в една програма.

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

Ето програмата с някои малки модификации. Горната програма PL/SQL показва как да извлечете една конкретна стойност с помощта на ключа. Можете да гледате видеоурока, за да научите как да извлечете всички стойности от асоциативен масив с помощта на цикли. Там съм го обяснил много подробно.

Преди да приключите този урок, има няколко насоки, които мисля, че трябва да знаете. Тези указатели са –

  • PL/SQL асоциативен масив поддържа BINARY_INTEGER, PLS_INTEGER, POSITIVE, NATURAL, SIGNTYPE или VARCHAR2 като индексен тип данни.
  • RAW, NUMBER, LONG-ROW, ROWID и CHAR са неподдържани индексни типове данни.

В случай на тип данни елемент, PL/SQL колекцията поддържа асоциативен масив –

  • PL/SQL скаларен тип данни :DATE, BLOB, CLOB, BOOLEAN или NUMBER &VARCHAR2 с техните подтипове.
  • Изведени данни :Термин, използван за такива типове данни, които са наследени от колона на таблица, израз на курсора или предварително дефинирана пакетна променлива.
  • Дефиниран от потребителя тип: Тип обект или тип колекция, който е дефиниран от потребителя.

Това е подробен урок за PL/SQL колекция – Асоциативен масив. Този урок обхваща всички теми, които можете да очаквате в изпита за сертифициране на база данни на Oracle, както и в интервюто. Надявам се, че ви е харесало да четете.

Можете да помогнете на другите да научат нещо ново, както и да ни помогнете да достигнем до повече хора, като споделите този блог във вашите социални мрежи. Не забравяйте да ни маркирате, защото обичаме да даваме гръмки възгласи на всички наши поддръжници, зрители и абонати. Благодаря и приятен ден!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Неща, които трябва да знаете за таблицата FND_LOBS в приложенията на Oracle

  2. Колоната за идентичност на Oracle и вмъкнете в select

  3. Вземете броя на дните между две дати в Oracle, включително датите

  4. Нулиране на последователността в oracle 11g

  5. Методът ExecuteBatch връща масив със стойност -2 в java