Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como criar arrays associativos no banco de dados Oracle




O array associativo é conhecido anteriormente como tabelas PL/SQL no PL/SQL 2 (versão PL/SQL que acompanha o Oracle 7) e Index-by-Table no Oracle 8 Database. Depois de Nested Table e VARRAYs, o Associative Array é o terceiro tipo de coleção que é amplamente utilizado pelos desenvolvedores.

Vamos descobrir as respostas de algumas perguntas sobre array associativo que ajudariam você a entendê-los melhor. Nesta seção, você também descobrirá algumas das principais diferenças e semelhanças entre Associative Array e outras coleções, como VARRAY e tabelas aninhadas.

As matrizes associativas são limitadas ou ilimitadas?


Semelhante às tabelas aninhadas, matrizes associativas são uma forma ilimitada de coleção. Isso significa que não há limite superior no número de elementos que ele pode conter. O mesmo não é verdade para VARRAYs, pois matrizes de variáveis ​​são limitadas por natureza.

As matrizes associativas são persistentes ou não persistentes?


Ao contrário de tabelas aninhadas e VARRAYs, matrizes associativas são uma forma de coleta não persistente . Isso significa que nem a matriz nem os dados podem ser armazenados no banco de dados, mas estão disponíveis apenas em blocos PL/SQL.

As matrizes associativas são esparsas ou densas?


Enquanto VARRAYs são arrays densamente povoados, tabelas aninhadas e Associative Arrays são arrays pouco povoados o que significa que a numeração do subscrito deve ser única, mas não necessariamente sequencial.

Podemos criar array associativo como objeto de banco de dados?


Devido à sua natureza não persistente, as matrizes associativas não podem ser armazenadas no esquema. Eles só podem ser criados em blocos PL/SQL, mas não no nível do esquema como objeto de banco de dados.

Podemos reutilizar array associativo?


Como mencionado acima, a matriz associativa é uma coleção não persistente que não pode ser criada no nível do esquema, portanto, não pode ser armazenada no esquema, portanto, não pode ser reutilizada.

A numeração de índice/numeração de subscrito na matriz associativa é implícita ou explícita?


Ao contrário de tabelas aninhadas e VARRAYs, a indexação em array associativo é explícito. Onde o Oracle Engine atribui o número do subscrito/índice aos elementos da tabela aninhada e às coleções VARRAY implicitamente em segundo plano, no array associativo os usuários precisam especificar o número do índice explicitamente ao preencher a coleção.

Como os dados são armazenados na matriz associativa?


A matriz associativa armazena dados em pares de chave-valor, onde o número do índice serve como chave e os dados armazenados na célula servem como valor.

Estas são algumas perguntas fundamentais que você pode esperar em seu exame ou entrevista. Continue lendo para descobrir as diferenças técnicas entre matrizes associativas e outras coleções.

Definir coleção PL/SQL – Matriz associativa?
Usando as informações derivadas das perguntas acima, podemos definir Associative Arrays como uma coleção unidimensional e homogênea que armazena dados em pares de valores-chave. É de natureza esparsa, ilimitada e não persistente.

Qual ​​é a sintaxe da matriz associativa PL/SQL?

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

Como dito acima, o array associativo é um tipo de coleção não persistente, portanto, não pode ser criado como objeto de banco de dados autônomo, portanto, não pode ser reutilizado como o restante das outras coleções. Só pode estar disponível no bloco PL/SQL. Sempre certifique-se de criar seu array associativo na seção DELCARATION do seu bloco PL/SQL. [Leia aqui para saber quantas seções existem no bloco PL/SQL?] Vamos ver a sintaxe em detalhes:

Tipo :A palavra-chave marca o início da instrução.

aArray_name :Nome do array associativo. É totalmente definido pelo usuário e está em conformidade com as normas de nomenclatura do Oracle Database.

É TABELA DE :Frase reservada do Oracle Database usando qual usuário informa ao compilador que tipo de elementos a matriz vai conter?

Element_Datatype :Tipo de dados dos elementos que o array irá conter. No Oracle Database todas as coleções são de natureza homogênea, o que significa que todos os elementos da coleção devem ser do mesmo tipo de dados.

Not_null :Uma cláusula opcional, que se usada garante que cada índice tenha um valor correspondente a ele em vez de um NULL.

INDEX POR :Cláusula que usa qual usuário especifica o tipo de dado do subscrito do array.

Index_elements_datatype :Tipo de dados dos elementos subscritos do array.


Exemplo:Como criar uma matriz associativa no banco de dados Oracle?


O array associativo só pode ser criado dentro de um bloco PL/SQL, portanto, seu escopo é limitado ao bloco em que é criado, o que significa que não pode ser usado fora desse bloco. Vamos ver como criar um Associative Array no Oracle Database?

Etapa 1:criar matriz associativa

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

No código acima criamos um array associativo com o nome ‘Books ' que pode conter elementos de tipos de dados NUMBER e subscrito do tipo de dados VARCHAR2.

Etapa 2:criar variável de matriz associativa

Isbn Books;

Você precisa de uma variável de matriz associativa para referenciar a matriz no programa. A variável de matriz pode ser criada com muita facilidade. Você só precisa escrever o nome da variável (que é 'isbn' no nosso caso) que é definido pelo usuário seguido pelo nome do array associativo.

Etapa 3:inserir dados na matriz associativa


Como mencionado acima, o array associativo mantém os dados em pares de valores-chave. Assim, ao contrário do resto das outras coleções, os usuários precisam inserir tanto o subscrito da matriz (a chave) quanto os dados.
BEGIN
-- How to insert data into the associative array 
isbn('Oracle Database') := 1234;
isbn('MySQL') := 9876; 

Assim como a tabela aninhada e os VARRAYs, inserimos dados no array associativo na seção de execução do bloco PL/SQL. Se você notou aqui, diferentemente de outras coleções, não usamos a instrução INSERT DML para inserir os dados, mas a inserimos usando a variável Array 'isbn' . Abaixo você pode ver a sintaxe da instrução insert para array associativo usando a variável array.
Array_variable (subscript/key) := data; 

Como você pode ver, para inserir os dados no array associativo, primeiro você deve escrever o nome da variável do array, seguido do subscrito do array e, em seguida, os dados do seu array.

Etapa 4:Como atualizar os dados da coleção – Array associativo?


Atualizar valores de array associativo é tão fácil quanto inseri-los. Se você quiser alterar qualquer valor, escreva a mesma instrução que é usada para inserção com os valores modificados. Por exemplo, digamos que você queira alterar o valor em relação à chave MySQL de 9876 para 1010, então basta escrever
	-- How to update data of associative array.	
	 	isbn('MySQL') := 1010; 

Novamente, você não precisa escrever o UPDATE DML para atualizar os valores. Você simplesmente usa a variável array.

Etapa 5:Como recuperar dados do array Associativo de coleção?


Assim como não precisamos da instrução Insert DML para inserir valores ou Update DML para atualizar valores, da mesma forma não precisamos Select DML para recuperar valores.

Suponha que você queira ver o valor armazenado na chave ‘Oracle Database’. Para isso, basta escrever…
-- how to retrieve data using key from associative array.  	
	  DBMS_OUTPUT.PUT_LINE ('Value '||isbn ('Oracle Database'));

Vamos combinar todos esses pedaços de código em um único programa.
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;
/

Aqui está o programa com algumas modificações minuciosas. O programa PL/SQL acima mostra como recuperar um valor específico usando a chave. Você pode assistir ao Tutorial em vídeo para aprender como recuperar todos os valores do Associative Array usando Loops. Lá eu expliquei em detalhes.

Antes de encerrar este tutorial, existem algumas dicas que acho que você deve saber. Esses ponteiros são –
  • Suporte de matriz associativa PL/SQL BINARY_INTEGER, PLS_INTEGER, POSITIVE, NATURAL, SIGNTYPE ou VARCHAR2 como tipo de dados de índice.
  • RAW, NUMBER, LONG-ROW, ROWID e CHAR são tipos de dados de índice incompatíveis.

No caso de Element Datatype, coleção PL/SQL Associative Array Supports –
  • Tipo de dados escalar PL/SQL :DATE, BLOB, CLOB, BOOLEAN ou NUMBER &VARCHAR2 com seus subtipos.
  • Dados inferidos :Termo usado para esses tipos de dados que são herdados de uma coluna de tabela, expressão de cursor ou variável de pacote predefinida
  • Tipo definido pelo usuário: Um tipo de objeto ou tipo de coleção que é definido pelo usuário.

Esse é um tutorial detalhado sobre PL/SQL Collection – Associative Array. Este tutorial abrange todos os tópicos que você pode esperar no Oracle Database Certification Exam, bem como na Entrevista. Espero que tenha gostado de ler.

Você pode ajudar outras pessoas a aprender algo novo, bem como nos ajudar a alcançar mais pessoas compartilhando este blog em suas redes sociais. Não se esqueça de nos marcar porque adoramos dar gritos altos a todos os nossos apoiadores, espectadores e assinantes. Obrigado e tenha um ótimo dia!