Home » Oracle » Teste dos Métodos do PL/SQL Table

Teste dos Métodos do PL/SQL Table

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>

4 Comments

  1. Comment by wemerson santos:

    óla quero saber ,como surgio . progamação PL SQL como inventarão , honde surgio, quem inventou,,, me ajudem por favor!!

    obrigado por tudo !

  2. Comment by tiago:

    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

  3. Comment by Fernando Boaglio:

    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

Deixe um Comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*