PL / SQL - Arrays
Neste capítulo, discutiremos arrays em PL / SQL. A linguagem de programação PL / SQL fornece uma estrutura de dados chamada deVARRAY, que pode armazenar uma coleção sequencial de tamanho fixo de elementos do mesmo tipo. Um varray é usado para armazenar uma coleção ordenada de dados; entretanto, geralmente é melhor pensar em uma matriz como uma coleção de variáveis do mesmo tipo.
Todos os varrays consistem em localizações de memória contíguas. O endereço mais baixo corresponde ao primeiro elemento e o endereço mais alto ao último elemento.
Um array é uma parte dos dados do tipo de coleção e significa arrays de tamanho variável. Estudaremos outros tipos de coleção em um capítulo posterior'PL/SQL Collections'.
Cada elemento em um varraytem um índice associado a ele. Ele também tem um tamanho máximo que pode ser alterado dinamicamente.
Criação de um tipo Varray
Um tipo varray é criado com o CREATE TYPEdeclaração. Você deve especificar o tamanho máximo e o tipo de elementos armazenados no varray.
A sintaxe básica para criar um tipo VARRAY no nível do esquema é -
CREATE OR REPLACE TYPE varray_type_name IS VARRAY(n) of <element_type>
Onde,
- varray_type_name é um nome de atributo válido,
- n é o número de elementos (máximo) no varray,
- element_type é o tipo de dados dos elementos da matriz.
O tamanho máximo de um varray pode ser alterado usando o ALTER TYPE declaração.
Por exemplo,
CREATE Or REPLACE TYPE namearray AS VARRAY(3) OF VARCHAR2(10);
/
Type created.
A sintaxe básica para criar um tipo VARRAY em um bloco PL / SQL é -
TYPE varray_type_name IS VARRAY(n) of <element_type>
Por exemplo -
TYPE namearray IS VARRAY(5) OF VARCHAR2(10);
Type grades IS VARRAY(5) OF INTEGER;
Vamos agora trabalhar em alguns exemplos para entender o conceito -
Exemplo 1
O programa a seguir ilustra o uso de varrays -
DECLARE
type namesarray IS VARRAY(5) OF VARCHAR2(10);
type grades IS VARRAY(5) OF INTEGER;
names namesarray;
marks grades;
total integer;
BEGIN
names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz');
marks:= grades(98, 97, 78, 87, 92);
total := names.count;
dbms_output.put_line('Total '|| total || ' Students');
FOR i in 1 .. total LOOP
dbms_output.put_line('Student: ' || names(i) || '
Marks: ' || marks(i));
END LOOP;
END;
/
Quando o código acima é executado no prompt SQL, ele produz o seguinte resultado -
Total 5 Students
Student: Kavita Marks: 98
Student: Pritam Marks: 97
Student: Ayan Marks: 78
Student: Rishav Marks: 87
Student: Aziz Marks: 92
PL/SQL procedure successfully completed.
Please note -
No ambiente Oracle, o índice inicial para varrays é sempre 1.
Você pode inicializar os elementos varray usando o método construtor do tipo varray, que tem o mesmo nome do varray.
Varrays são arrays unidimensionais.
Um varray é automaticamente NULL quando é declarado e deve ser inicializado antes que seus elementos possam ser referenciados.
Exemplo 2
Os elementos de um varray também podem ser um% ROWTYPE de qualquer tabela do banco de dados ou% TYPE de qualquer campo da tabela do banco de dados. O exemplo a seguir ilustra o conceito.
Usaremos a tabela CUSTOMERS armazenada em nosso banco de dados como -
Select * from customers;
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
+----+----------+-----+-----------+----------+
O exemplo a seguir faz uso de cursor, que você estudará em detalhes em um capítulo separado.
DECLARE
CURSOR c_customers is
SELECT name FROM customers;
type c_list is varray (6) of customers.name%type;
name_list c_list := c_list();
counter integer :=0;
BEGIN
FOR n IN c_customers LOOP
counter := counter + 1;
name_list.extend;
name_list(counter) := n.name;
dbms_output.put_line('Customer('||counter ||'):'||name_list(counter));
END LOOP;
END;
/
Quando o código acima é executado no prompt SQL, ele produz o seguinte resultado -
Customer(1): Ramesh
Customer(2): Khilan
Customer(3): kaushik
Customer(4): Chaitali
Customer(5): Hardik
Customer(6): Komal
PL/SQL procedure successfully completed.