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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
-- -- 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; / |
1 |
1 |
<a href="http://otn.oracle.com">http://otn.oracle.com </a> |