Publicado em 07/10/2001
O PL/SQL Table nada mais é do que um vetor de elementos, que podem ser
escalares (data, número, string) ou compostos (tipo record).
Entretanto o que muita gente não sabe é que no Oracle8 foram introduzidos
novos métodos ao PL/SQL Table que são bem úteis.
No exemplo abaixo eu ilustro o funcionamento da maioria deles.
Conecte-se no SQL*Plus com qualquer usuário e roda a seguinte rotina:
--
-- Teste dos Métodos do PL/SQL Table
--
-- Fernando Boaglio - 24/09/98
--
--
DECLARE
-- Declaração
TYPE dept_table_type IS TABLE OF number(5);
-- INDEX BY BINARY_INTEGER; compatibilidade com o PL/SQL 2 (Oracle7)
dept_table dept_table_type:=dept_table_type(); -- já inicializa com NULL
begin
dbms_output.enable;
-- Inicialização
dbms_output.put_line('Variável tipo Table PL/SQL 8:');
dbms_output.put_line('*****************************');
dbms_output.new_line;
dbms_output.put_line('Alocando 10 espaços nulos...');
-- EXTEND
dept_table.extend(10);
-- Atribuição
dbms_output.put_line('Inicializando as variáveis...');
for i in 1..10 loop
if mod(i,2)=1 then dept_table(i):=i*10;
end if;
end loop;
-- Mostra o conteúdo
for i in 1..16 loop
if dept_table.exists(i)
then dbms_output.put_line(' Posição '||to_char(i)||' declarada contendo '||nvl(to_char(dept_table(i)),'NULL') );
else dbms_output.put_line(' Posição '||to_char(i)||' não declarada');
end if;
end loop;
-- COUNT
dbms_output.put_line('A variável Table tem '||to_char(dept_table.count)||' elementos.');
-- FIRST
dbms_output.put_line('A posição do primeiro é :'||to_char(dept_table.first)||'.');
-- LAST
dbms_output.put_line('A posição do último é :'||to_char(dept_table.last)||'.');
-- PRIOR
dbms_output.put_line('A posição que precede a 3 é :'||to_char(dept_table.prior(3))||'.');
-- NEXT
dbms_output.put_line('A posição depois do 3 é :'||to_char(dept_table.next(3))||'.');
-- EXTEND
dbms_output.put_line('Alocando mais 5 espaços como cópia da posição 3');
dept_table.extend(5,3);
for i in 1..16 loop
if dept_table.exists(i)
then dbms_output.put_line(' Posição '||to_char(i)||' declarada contendo '||nvl(to_char(dept_table(i)),'NULL') );
else dbms_output.put_line(' Posição '||to_char(i)||' não declarada');
end if;
end loop;
dbms_output.put_line('A variável Table tem '||to_char(dept_table.count)||' elementos.');
-- TRIM
dbms_output.put_line('Removendo o último campo...');
dept_table.trim;
for i in 1..16 loop
if dept_table.exists(i)
then dbms_output.put_line(' Posição '||to_char(i)||' declarada contendo '||nvl(to_char(dept_table(i)),'NULL') );
else dbms_output.put_line(' Posição '||to_char(i)||' não declarada');
end if;
end loop;
-- DELETE
dbms_output.put_line('Removendo o primeiro campo...');
dept_table.delete(1);
for i in 1..16 loop
if dept_table.exists(i)
then dbms_output.put_line(' Posição '||to_char(i)||' declarada contendo '||nvl(to_char(dept_table(i)),'NULL') );
else dbms_output.put_line(' Posição '||to_char(i)||' não declarada');
end if;
end loop;
end;
/
http://otn.oracle.com