Tabelas Oracle PLSQL
- Tabelas PLSQL são tipos de dados compostos.
- Eles se comportam da mesma maneira que os arrays, exceto que não têm limites superiores, permitindo que eles se estendam constantemente.
- Eles também são chamados de índice por tabela
- A tabela PLSQL contém dois elementos
(1) Uma chave primária de tipos de dados BINARY_INTEGER que indexam a tabela, que não precisam ser consecutivos. A coleção é estendida atribuindo valores a um elemento usando um valor de índice que não existe atualmente.
também podemos indexar por um valor de string
(2) Uma coluna de tipo de dados escalar ou registro que armazena o índice por elementos de tabela
Como definir e declarar o tipo de tabela
Para criar tabelas PL/SQL, você executa duas etapas. Primeiro, você define um tipo TABLE e, em seguida, declara as tabelas PL/SQL desse tipo. Você pode definir tipos de TABLE na parte declarativa de qualquer bloco, subprograma ou pacote usando a sintaxe
Syntax TYPE table_type_name IS TABLE OF datatype [NOT NULL] INDEX BY BINARY_INTEGER;
Se o tipo de elemento for um tipo de registro, cada campo no registro deverá ter um tipo de dados escalar, como CHAR, DATE ou NUMBER.
Para especificar o tipo de elemento, você pode usar %TYPE para fornecer o tipo de dados de uma variável ou coluna de banco de dados
DECLARE TYPE DEPTTabTyp IS TABLE OF dept.dept_name%TYPE INDEX BY BINARY_INTEGER;
Você pode adicionar a restrição NOT NULL a uma definição de tipo TABLE e assim evitar o armazenamento de nulos em tabelas PL/SQL desse tipo:
DECLARE TYPE DEPTTabTyp IS TABLE OF dept.location%TYPE NOT NULL INDEX BY BINARY_INTEGER;
Você também pode usar %ROWTYPE para especificar o tipo de elemento.
DECLARE TYPE deptTabTyp IS TABLE OF dept%ROWTYPE INDEX BY BINARY_INTEGER;
você usa um tipo RECORD definido pelo usuário para especificar o tipo de elemento:
DECLARE TYPE emp_phonetyp IS RECORD ( Stdcode PLS_INTEGER, phn_number PLS_INTEGER, extension PLS_INTEGER ); TYPE emp_contact IS TABLE OF emp_phonetyp INDEX BY BINARY_INTEGER;
Depois de definir um tipo TABLE, você pode declarar tabelas PL/SQL desse tipo
DECLARE TYPE SalTabTyp IS TABLE OF emp.sal%TYPE INDEX BY BINARY_INTEGER; TYPE EmpTabTyp IS TABLE OF emp%ROWTYPE INDEX BY BINARY_INTEGER; sal_tab SalTabTyp; -- declare PL/SQL table emp_tab EmpTabTyp; -- declare another PL/SQL table
Atributos ou Método da Tabela PLSQL
Uma tabela PL/SQL tem os atributos EXISTS, COUNT, FIRST, LAST, PRIOR, NEXT e DELETE.
Eles tornam as tabelas PL/SQL mais fáceis de usar e seus aplicativos mais fáceis de manter.
plsql_table_name.attribute_name |
Os atributos existem, PRIOR, NEXT e DELETE recebem os parâmetros. Cada parâmetro deve ser uma expressão que produza um valor BINARY_INTEGER ou um valor implicitamente conversível para esse tipo de dados.
DELETE age como um procedimento, que é chamado de instrução. No entanto, os outros atributos da tabela PL/SQL agem como uma função, que é chamada como parte de uma expressão.
Existe(n) | Retorna true se o enésimo elemento na tabela existir |
contagem | Retorne o número de elementos na tabela |
Primeiro e último | FIRST e LAST retornam o primeiro e o último (menor e maior) números de índice em uma tabela PL/SQL |
PRIOR(n ) | retorna o número do índice que precede o índice n em uma tabela PL/SQL |
PRÓXIMO(n ) | retorna o número do índice que sucede ao índice n |
Excluir | DELETE remove todos os elementos de uma tabela PL/SQL. APAGAR(n ) remove o n º elemento. Se n é nulo, DELETE(n ) faz nada. APAGAR(m , n ) remove todos os elementos no intervalo m .. n . Se m é maior que n ou se m ou n é nulo, DELETE(m , n ) não faz nada |
Tabelas PL/SQL para mover dados em massa para dentro e fora de tabelas de banco de dados ou entre aplicativos do lado do cliente e subprogramas armazenados.
Como preencher os dados na tabela PLSQL
Tabelas com tipos de dados simples podem ser preenchidas como:
<variable>(<integer>) := <value>;
As tabelas com tipos de dados complexos precisarão das colunas preenchidas individualmente como:
<variable>(<integer>).<column_name> := <value>;
Ou de um cursor:
fetch <cursor_name> into <variable>(<integer>);
Type emptabletype is table of varchar2(10)
Index by binary_integer;
emp_table emptabletyp;
emp_table (1) := ‘good’;
emp_table (2) := ‘bad’’;
Você pode recuperar dados Oracle em uma tabela PL/SQL de outras três maneiras também
a)A instrução SELECT INTO permite selecionar uma única linha de dados
Usando a instrução SELECT INTO, você pode selecionar uma entrada de coluna em um elemento escalar. Ou você pode selecionar uma linha inteira em um elemento de registro. No exemplo a seguir, você seleciona uma linha da tabela de banco de dados dept em um registro armazenado pelo primeiro elemento da tabela PL/SQL dept_tab:
DECLARE
TYPE DeptTabTyp IS TABLE OF dept%ROWTYPE
INDEX BY BINARY_INTEGER;
dept_tab DeptTabTyp;
BEGIN
/* Select entire row into record stored by first element. */
SELECT * INTO dept_tab(1) FROM dept WHERE deptno = 10;
IF dept_tab(1).dname = 'ACCOUNTING' THEN ...
...
END;
b) Declaração FETCH
Com a instrução FETCH, você pode buscar uma coluna inteira de dados Oracle em uma tabela PL/SQL de escalares.
Ou você pode buscar uma tabela inteira de dados Oracle em uma tabela de registros PL/SQL.
DECLARE
TYPE EmpTabTyp IS TABLE OF emp%ROWTYPE
INDEX BY BINARY_INTEGER;
emp_tab EmpTabTyp;
i BINARY_INTEGER := 0;
CURSOR c1 IS SELECT * FROM emp;
BEGIN
OPEN c1;
LOOP
i := i + 1;
/* Fetch entire row into record stored by ith element. */
FETCH c1 INTO emp_tab(i);
EXIT WHEN c1%NOTFOUND;
-- process data record
END LOOP;
CLOSE c1;
END;
c) cursor FOR loop permite buscar várias linhas.
DECLARE
TYPE EnameTabTyp IS TABLE OF emp.ename%TYPE
INDEX BY BINARY_INTEGER;
TYPE SalTabTyp IS TABLE OF emp.sal%TYPE
INDEX BY BINARY_INTEGER;
ename_tab EnameTabTyp;
sal_tab SalTabTyp;
n BINARY_INTEGER := 0;
BEGIN
/* Fetch entire columns into PL/SQL tables. */
FOR emp_rec IN (SELECT ename, sal FROM emp) LOOP
n := n + 1;
ename_tab(n) := emp_rec.ename;
sal_tab(n) := emp_rec.sal;
END LOOP;
...
END;
Você deve ler estas outras postagens PLSQL
Estrutura e tipos de bloco Oracle PLSQL
Registros Oracle PLSQL
Perguntas da entrevista sobre Oracle plsql
Tutoriais rápidos sobre Oracle sql e plsql