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> |
sexta-feira, abril 11th 2008 at 4:23 pm |
óla quero saber ,como surgio . progamação PL SQL como inventarão , honde surgio, quem inventou,,, me ajudem por favor!!
obrigado por tudo !
domingo, abril 13th 2008 at 3:06 am |
http://en.wikipedia.org/wiki/PLSQL
terça-feira, janeiro 27th 2009 at 8:38 am |
Bom tutorial.
Uma questão, os types criados em pl/sql ficam registados em alguma tabela Oracle ? Ou seja, eu queria saber o tipo de dados das colunas de uma pl/sql table sem ter que aceder ao package PL/SQL.
Obrigado
domingo, fevereiro 1st 2009 at 7:56 pm |
Que eu saiba eles não ficam registrados em lugar algum, mas com certeza eles são algum desses tipos aqui: http://www.techonthenet.com/oracle/datatypes.php