• Nenhum resultado encontrado

O curso de base de dados ORACLE terá os seguintes módulos:  Introdução a bases de dados (20h)

N/A
N/A
Protected

Academic year: 2019

Share "O curso de base de dados ORACLE terá os seguintes módulos:  Introdução a bases de dados (20h)"

Copied!
233
0
0

Texto

(1)

1

DISCIPLINA:

BASE DE DADOS 1

O docente:

Hélder MC Muianga

 helder.muianga@uem.mz  (+258) 82-4727160

(2)
(3)

UEM

DMI

3

Sumário do Curso

O curso de base de dados ORACLE terá os

seguintes módulos:

Introdução a bases de dados (20h)

Linguagem SQL (Básico) (20h)

Linguagem SQL (Avançado) (20h)

Programação em PL/SQL (30h)

Administração de base de dados Oracle (40h)

(Básico)

Administração de base de dados Oracle(40h)

(4)

UEM

DMI

Objectivos do curso

Ao fim deste módulo o participante deverá estar habilatado em:

 Programar em PL/SQL usando:  Estrutura de PL/SQL

 Variáveis em PL/SQL

 Estruturas de controle (IF…THEN… ELSE, FOR…LOOP)  Cursor

 Processo de excepção  Procedimento e Função

(5)

UEM

DMI

5

Conteúdo

 Introdução ao PL/SQL

 Sumário de PL/SQL  Vantagem de PL/SQL

 Declaração de variáveis de PL/SQL

 Norma nomeada

 Declaração de tipo escalar  Declaração de tipo %TYPE

 Estrutura de Blocos PL/SQL

 DECLARE, BEGIN, EXCEPTION e END

 Interacção com servidor de Oracle

 Uso SQL no ambiente de PL/SQL

(6)

UEM

DMI

Conteúdo “cont.”

 Estruturas de controlo

 IF, CASE, LOOP, WHILE e FOR

 Tipos de dados

 %ROWTYPE

 INDEX BY

 Uso de cursor explícito

 Declaração de CURSOR

 Uso de CURSOR explícito

 Uso de excepção

(7)

UEM

DMI

7

Objectivos

Depois de terminar esta lição, deverá estar capacitado para:

 Explicar a necessidade do PL/SQL

 Explicar os benefícios que advém do uso do

PL/SQL

 Identificar os diferentes tipos de blocos do PL/SQL

 Usar o iSQL*Plus como um ambiente de

desenvolvimento do PL/SQL

(8)

UEM

DMI

Questão 1

 Uma empresa do ramo industrial, tem feito

periodicamente um balanço dos seus rendimentos.

 Ao fazer cálculo de bónus de empregados, deve

seguir os seguintes critérios:

 Se esse empregado for do departamento de Vendas,

recebe 2000 e os restantes 1000.

 Caso esse empregado seja Gestor de Vendas recebe mais

1000.

 A questão é: Como resolver este problema

(9)

UEM

DMI

9

O que é PL/SQL

PL/SQL

Procedural Language extension to SQL

 Extensão de Linguagem Procedural para SQL

 É linguagem padrão da Oracle para acesso a

dados numa BD relacional.

 No seu processamento integra código SQL

IF… THEN … ELSE … END IF; LOOP … END LOOP; SQL SELECT … FROM …; UPDATE …; PL/SQL

IFTHEN

UPDATE …;

ELSE

INSERT …;

END IF;

(10)

UEM

DMI

O que é PL/SQL (Cont.)

PL/SQL:

 Define uma estrutura em bloco para execução de

códigos SQL. A manutenção do código é simples e depende da correcta definição da estrutura

 Define procedural constructs como:  Variáveis, constantes e tipos

 Estruturas de controle tais como: declarações condicionais

e ciclos

(11)

UEM

DMI

11

Porquê PL/SQL?

Existem alguns comandos básicos em SQL que podemos usar para manipular dados:

Exemplo:

Select empno, ename, deptno, sal from emp;

A declaração SQL acima, é bastante simples e directa. Contudo, enfrentaremos alguns problemas caso queiramos alterar os dados por si devolvidos segundo uma certa condição. Deparamo-nos com algumas limitações do SQL.

Considere o seguinte problema, já modificado:

Para todo o empregado devolvido, verifique o seu deptno e o sal. Dependendo

do desempenho do departamento e do salário do empregado poderá querer atribuir bónus diferentes a cada um dos empregados.

(12)

UEM

DMI

Porquê PL/SQL (Cont.)

Olhando para o problema anterior, constatamos que precisamos executar uma declaração SQL e ainda aplicar uma certa lógica aos dados por si devolvidos. Usando SQL para resolver este problema, precisaríamos de uma declaração SQL para cada

deptno e efectuar a referida bonificação a cada empregado sem

se esquecer que será preciso verificar o salário antes de atribuir o bónus.

Desta forma o problema torna-se complicado. Sentimos que tudo

seria muito mais simples se tivéssemos declarações

(13)

UEM

DMI

13

Ambiente de PL/SQL

Execução de Servidor de Oracle Execução de Ferramentas

* Ferramentas : Oracle Forms, Oracle Report

SQL *Plus ORACLE

Oracle Forms Bloco de PL/SQL Mota de PL/SQL Bloco PL/SQL

Executor de SQL Mota de PL/SQL

Procedural SQL

Executor de Declaração Procedural

Mota de PL/SQL Procedural

SQL

Executor de Declaração

Procedural

Executor de SQL

ORACLE

(14)

UEM

DMI

Vantagens do PL/SQL

1. Integração de construção procedural com SQL

• Quando executamos um comando SQL, este comunica

ao Servidor de BD o que deve ser feito e não como deve ser feito. PL/SQL incorpora estas declarações de controle e declarações condicionais junto com o SQL. Dá-nos um melhor controle sobre as nossas declarações SQL e sua execução. O problema visto antes, mostra a necessidade de tal integração.

2. Melhoria no desempenho

• Sem o PL/SQL não seria possível combinar logicamente

(15)

UEM

DMI

15

Vantagens do PL/SQL

(Cont.)

1. Envio de declarações SQL uma a uma à BD (inúmeras solicitações da BD)

ORACLE ORACLE SQL 1 SQL 2 SQL 3 SQL 4 Resultado SQL1 SQL2

IF … THEN

SQL 3 SQL4 ELSE SQL5 END IF; Uma vez Várias vezes

(16)

UEM

DMI

Vantagens do PL/SQL

(Cont.)

3. Desenvolvimento de programas em módulos

 A unidade básica dum programa PL/SQL é um bloco. Estes blocos podem ser sequenciais ou podem ser aninhados

 Manutenção e Depuração (melhora de legibilidade)

4. Integração com ferramentas da Oracle

 Apoia todos os tipos de dados e mais

 Formulários Oracle, Relatórios Oracle

5. Portabilidade

 Programa do PL/SQL pode ser executado em qualquer ambiente onde se possa executar o Servidor Oracle independentemente da plataforma do SO.

6. Controle de excepções

(17)

UEM

DMI

17

Estrutura do Bloco PL/SQL

[DECLARE]

Variáveis, cursores, excepções definidas pelo usuário

BEGIN

Declarações SQL, Declarações PL/SQL

[EXCEPTION]

Acções a levar a cabo caso ocorra um erro

END;

Opcional

Opcional Obrigatório

Obrigatório  Um bloco PL/SQL é composto pelas secções de:

1. Declaração (DECLARE)

2. Execução (BEGIN … END) 3. Excepção (EXCEPTION)

(18)

UEM

DMI

Secções dum Bloco PL/SQL

Declaração

 Começa com a palavra DECLARE e termina quando a secção de execução

começa

 É opcional

 Contém declaração de variáveis, constantes, cursor e excepção definidas

pelas usuário

Execução

 Começa com a palavra BEGIN e termina com a palavra END seguido de

ponto-e-vírgula (;)

 Secção obrigatória

 Contém SQL, estruturas de controle e secção de excepção e pode ainda

conterb muitos outros blocos PL/SQL

Excepção

(19)

UEM

DMI

19

Tipo de Blocos

 Um programa PL/SQL inclui um ou mais blocos que

podem estar separados ou aninhados. Existem três tipos de blocos que compõem um programa PL/SQL:

PROCEDURE nome

IS

BEGIN

--Declarações

[EXCEPTION]

END; FUNCTION nome RETURN tipo_de_dado IS BEGIN --Declarações

[EXCEPTION]

END;

[DECLARE]

BEGIN

--Declarações

[EXCEPTION]

END;

Anónimo Procedimento Função

(20)

UEM

DMI

Tipo de Blocos (cont.)

Anónimo

 É um bloco sem nome

 Declarado num ponto da aplicação onde vai ser executado e é

compilado sempre que a aplicação for executada. Estes blocos não são armazenados na BD. São enviados ao executor de declarações PL/SQL no momento da execução.

Subprogramas

Procedimento

 Tem nome

 Pode-se indicar valor retornado, este valor é mudado no

(21)

UEM

DMI

21

Tipo de Programas

Ferramentas Constructs Servidor Oracle Construct

Blocos Anónimos Blocos Anónimos

Procedimentos ou Funções Stored Proceduresou Stored Functions

Aplicações de Pack ages Stored Pack ages

Aplicações de Triggers Triggers da BD

(22)

UEM

DMI

Ambientes de Programação

PL/SQL

 iSQL *Plus

 É a aplicação que funciona em browser (ex. Internet Explorer, Firefox, Opera e

mais)

 Conectar base de dados local e remota

 É possível executar todas as operações de programação

 Oracle JDeveloper 10g (grátis)

 É um software para desenvolver páginas web com GUI

 Estabelece conexão à BD com ajuda dum user-friendly wizard

 Pesquisa dados da BD à qual se está conectado  Cria objectos e usuários de BD

 Cria, executa e depura programas de PL\SQL como procedimentos, funções e

packages

 PL/SQL Developer (versão trial)

 Uma aplicação para desenvolver programas PL\SQL

(23)

UEM

DMI

23

Uso de

i

SQL*Plus

Inicializar o navegador (ex. IE, Firefox…)

Escrever o seguinte URL:

 http://[endereço de servidor]:[Portos]/isqlplus

 Username : oracleXX

(24)

UEM

DMI

Criação Dum Bloco Anónimo

Digite o bloco anónimo no

Workspace

do

(25)

UEM

DMI

25

Execução Dum Bloco

Anónimo

(26)

UEM

DMI

Saída Dum Bloco PL/SQL

Configure a visualização de saída no

i

SQL*Plus usando o comando:

 SET SERVEROUTPUT ON

Use o pacote pré-definido da Oracle e seus

procedimentos:

(27)

UEM

DMI

27

Saída Dum Bloco

PL/SQL (cont.)

(28)

UEM

DMI

(29)

UEM

DMI

29

Comando SET

 Torna a saída legível no SQL*Plus

 É dispensável o uso deste comando quando se usa

iSQL*Plus

Variável Valor Descrição

HEADING ON ou OFF Exibe títulos de coluna

LINESIZE Número Indica comprimento de uma linha NULL Caracter Substitui valor de Nulo por outro PAGESIZE Número Número de linhas por página

TIMING ON ou OFF Exibe a duração duma execução

(30)

UEM

(31)

UEM

DMI

31

Exemplos

1. Qual dos seguintes blocos PL/SQL será executado com sucesso?

a) BEGIN

END;

b) DECLARE

quantidade INTEGER (10);

c) DECLARE

BEGIN END;

d) DECLARE

quantidade INTEGER (10); BEGIN

DBMS_OUTPUT.PUT_LINE(quantidade); END;

2. Crie e execute um bloco anónimo que imprime na tela a seguinte

mensagem: “Meu primeiro bloco em PL/SQL”. Grave com o nome

(32)

UEM

DMI

Objectivos

Depois de terminar esta lição, deverá estar capacitado para:

 Listar os identificadores válidos e inválidos

 Listar os usos das variáveis

 Declarar e inicializar variáveis

 Listar e descrever os diferentes tipos de dados

 Identificar e listar os benefícios do uso do

(33)

UEM

DMI

33

Sumário

Explicar a necessidade do PL/SQL

Explicar os benefícios que advém do uso do

PL/SQL

Identificar os diferentes tipos de blocos do

PL/SQL

Usar o

i

SQL*Plus como um ambiente de

desenvolvimento do PL/SQL

(34)

UEM

DMI

Questão 2

 Na qualidade de operador da BD, solicita-se uma

listagem dos empregados dos departamentos 10 e 20.

 Adicionalmente questiona-se, se PL/SQL também

tem variáveis, uma vez tratar-se duma linguagem procedural?

(35)

UEM

DMI

35

Uso de Variáveis

 Variáveis são usadas para:

Armazenamento temporário de dados

SELECT coluna [, coluna …] INTO var1 [, var2 …] FROM

Manipulação de valores armazenados

 Podemos usar o valor armazenado para manipular/processar dados

Reusabilidade

 Depois de declaradas, as variáveis podem ser usadas repetidamente

por várias aplicações bastando para tal fazer referência às mesmas.

(36)

UEM

DMI

Identificadores

Os identificadores são usados para:

• Nomear uma variável

• Providenciar a convenção para os nomes das variáveis como sendo:

• Deve começar sempre com uma letra

• Pode incluir letras e números

(37)

UEM

DMI

37

Identificadores VS Variáveis

Qual é a diferença entre Identificadores e variáveis?

• Identificadores são nomes das variáveis.

• Variáveis são locais de armazenamento temporário de dados. O armazenamento permanente dos

dados é feito na memória. Portanto, as variáveis apontam para este ponto da memória a partir do qual os dados podem ser lidos e modificados.

• Identificadores são usados para nomear qualquer objecto PL/SQL como: variáveis, tipos, cursores e subprogramas.

(38)

UEM

DMI

Controle de Variáveis em

PL/SQL

Variáveis são:

 Declaradas e inicializadas na secção de

declaração

 Usadas e atribuídas novos valores na secção de

execução

 Passadas como parâmentros aos subprogramas

PL/SQL

 Usadas para armazenar o resultado da saída

(39)

UEM

DMI

39

Declaração e Inicialização de

Variáveis PL/SQL

Sintaxe

Identificador [CONSTANT] tipo_de_dado [NOT NULL]

[:= | DEFAULT expr];

Exemplos

DECLARE

emp_data DATE;

emp_dno NUMBER(2) NOT NULL := 10; location VARCHAR(13) := ‘Atlanta’;

(40)

UEM

DMI

Declaração e Inicialização

de Variáveis PL/SQL (cont.)

SET SERVEROUTPUT ON DECLARE

Nome VARCHAR2(20); BEGIN

DBMS_OUTPUT.PUT_LINE('O Meu Nome é ' || Nome);

Nome := ‘ALBERTO’;

(41)

UEM

DMI

41

Declaração e Inicialização

de Variáveis PL/SQL (cont.)

SET SERVEROUTPUT ON

DECLARE

Nome VARCHAR2(20)

:= ‘ALBERTO’

;

BEGIN

Nome

:= ‘JOAO’

;

DBMS_OUTPUT.PUT_LINE('O Meu Nome

é ' || Nome);

(42)

UEM

DMI

Delimitadores Com

Apóstrofes

Muitas palavras Inglesas levam consigo apóstrofes e por vezes pode haver necessidade de gerar saídas para esse tipo de palavras:

SET SERVEROUTPUT ON DECLARE

event1 VARCHAR2(15); event2 VARCHAR2(15); BEGIN

(43)

UEM

DMI

43

Tipos de Variáveis

• Variáveis PL/SQL:

• Escalares

• Armazenam valores singulares

• Compostas

• Um registo e uma tabela são exemplos de variáveis compostas

• Referência

• Armazenam ponteiros, que apontam para o local de armazenamento de dados

• Large Objects (LOB)

• Armazenam valores denominados alocadores, que especificam a localização de objectos de grande porte (como imagens gráficas).

• Variáveis Não-PL/SQL:

(44)

UEM

DMI

Questão 3

Agora já sabemos:

 Que PL/SQL usa variáveis

Pretendemos declarar variáveis como:

1. 123_sal

2. sal_123

3. select#SMITH

(45)

UEM

DMI

45

Directrizes Para Declaração e

Inicialização de Variáveis PL/SQL

 Sigue a convenção para atribuição de nomes  Dê nomes significativos

 Inicialize sempre as variáveis designadas como sendo NOT NULL e

CONSTANT

 Evite atribuir nome duma coluna a um identificador

DECLARE

enome VARCHAR2(20); BEGIN

SELECT enome INTO enome FROM emp

WHERE empno=50; END;

(46)

UEM

DMI

Directrizes Para Declaração e

Inicialização de Variáveis

PL/SQL(Cont.)

• Declare um identificador por linha para legibilidade e fácil manutenção de código

DECLARE

nome VARCHAR2(20);

num_dept NUMBER(2);

salario NUMBER(6);

BEGIN....

(47)

UEM

DMI

47

Questão 4

(48)

UEM

DMI

Tipos de Variáveis

Escalar

 NUMBER

 VARCHAR2

 DATE

 BOOLEAN

Composto

 %ROWTYPE

 INDEX BY

 VARRAY

Referência

(49)

UEM

DMI

49

Tipo de Dados Escalar

 CHAR [(comprimento_máximo)]

VARCHAR2 (comprimento_máximo)

 LONG

 LONG RAW

NUMBER [(precisão, escala)]  BINARY_INTEGER

 PLS_INTEGER  BOOLEAN

 BINARY_FLOAT  BINARY_DOUBLE

DATE

TIMESTAMP[(precisão)]

TIMESTAMP WITH TIME ZONE

TIMESTAMP WITH LOCAL TIME ZONE  INTERVAL YEAR TO MONTH

(50)

UEM

DMI

Declaração de Variáveis

Escalares

Exemplo:

DECLARE

emp_trabalho VARCHAR2(9);

contador BINARY_NUMBER :=0

dept_total_sal NUMBER(9,2) :=0;

data_compra DATE := SYSDATE +7;

c_taxa CONSTANT NUMBER(3,2) :=8.25;

(51)

UEM

DMI

51

Questão 5

 Ao declarar uma certa variável, será preciso

pesquisar o tipo de dado da coluna afectada?

 Por exemplo, declaramos a variável emp_num,

(52)

UEM

DMI

Atributo %TYPE

Atributo %TYPE

É usado para declarar um variável de acordo:

 Com a definição duma certa coluna na BD

 Com a declaração de uma outra variável

É prefixado com:

 A tabela e coluna da BD

(53)

UEM

DMI

53

Declaração de Variáveis

Usando Atributo %TYPE

Sintaxe

Exemplos

Identificador tabela

.

nome_de_coluna

%TYPE;

nome empregado.enome%TYPE;

idade

empregado.idade%TYPE;

(54)

UEM

DMI

Declaração de Variáveis

BOOLEAN

Só podem receber valores TRUE, FALSE e

NULL

Expressões condicionais usam operadores

lógicos AND, OR e operador unário NOT

para verificar os valores da variável

Sempre cedem TRUE, FALSE ou NULL

Operações aritméticas, caracteres e

(55)

UEM

DMI

55

Variáveis de Ambiente

Variáveis de ambiente são:

 Criadas no ambiente de desenvolvimento

 Também designadas de variáveis anfitriãs

 Criadas usando a palavra reservada VARIABLE

 Usadas em declarações SQL e nos blocos PL/SQL

 Acedidas mesmo depois de se ter executado o

bloco PL/SQL

 Referenciadas com uma precedência de dois

(56)

UEM

DMI

Variáveis de Ambiente

(Cont.)

Exemplo:

VARIABLE resultado NUMBER BEGIN

SELECT (sal*12) + NVL(comm,0) INTO :resultado FROM emp

WHERE empno=7788; END;

(57)

UEM

DMI

57

Imprimindo Variáveis de

Ambiente

Exemplo:

VARIABLE emp_salario NUMBER BEGIN

SELECT sal INTO :emp_salario FROM emp WHERE empno=7788; END;

/

PRINT emp_salario

(58)

UEM

DMI

Imprimindo Variáveis de

Ambiente(Cont.)

Exemplo:

VARIABLE emp_salario NUMBER SET AUTOPRINT ON

BEGIN

SELECT sal INTO :emp_salario FROM emp

(59)

UEM

DMI

59

Variáveis de Substituição

 São usadas para receber os dados de entrada do usuário no momento

de execução

 São referenciadas num bloco PL/SQL precedido do símbolo &  São usadas para evitar uma codificação explícita de valores que

podem ser obtidos no momento da execução VARIABLE emp_salario NUMBER

SET AUTOPRINT ON DECLARE

emp_numero NUMBER(6) := &emp_numero ; BEGIN

SELECT sal INTO :emp_salario FROM emp

WHERE empno=emp_numero; END;

(60)

UEM

DMI

Variáveis de Substituição

(61)

UEM

DMI

61

Solicitando Variáveis de

Substituição

SET VERIFY OFF

VARIABLE emp_salario NUMBER

ACCEPT emp_numero PROMPT ‘Introduza um valor valido para o número do empregado: ’

SET AUTOPRINT ON DECLARE

emp_no NUMBER(6):= &emp_numero; BEGIN

SELECT sal INTO :emp_salario FROM emp

WHERE empno=emp_no; END;

(62)

UEM

DMI

Uso do DEFINE Para

Variáveis do Usuário

Exemplo:

SET VERIFY OFF

SET SERVEROUTPUT ON

DEFINE emp_apelido = 'SMITH' DECLARE

salsal NUMBER; BEGIN

SELECT sal INTO salsal FROM emp

(63)

UEM

DMI

63

Questão 6

 Analisemos a seguinte questão:

 Ao referenciar dados da tabela, temos que declarar

variáveis para cada coluna? (É muito trabalhoso…)

 Ao existir muitas variáveis a legibilidade é inexistente

 Não há maneira de declarar várias variáveis duma só vez?

SELECT empno, ename, sal FROM emp

WHERE deptno=d_no;

empno

enome

SELECT * FROM emp

WHERE deptno=d_no;

d_no

sal

(64)

UEM

DMI

Tipo de Dados Compostos

Campo1 (DATA) Campo2 (VARCHAR2)Campo3(NUMBER) Campo4(BLOB)

(65)

UEM

DMI

65

Questão 7

Existem alguns comandos escritos com letra

maiúscula e outras minúscula. Existe alguma

diferença? Ou existe alguma norma?

 Em declaração SQL tem muitos símbolos. Por

(66)

UEM

DMI

Letra Maiúscula e Minúscula

Não tem diferença entre letra maiúscula e

minúscula, excepto para dados

Exemplos

 DECLARE e declare

 SET SERVER ON e Set Server On

 ‘JOHN’ e ‘John’ e ‘john’

Não há diferença

(67)

UEM

DMI

67

Objectivos

Depois de terminar esta lição, deverá estar capacitado para:

 Identificar unidades léxicas num bloco PL/SQL  Usar funções SQL pré-definidas no PL/SQL

 Descrever quando é que ocorre um conversão

explícita e implícita e quando devem ser assim tratadas

 Construir blocos aninhados e qualificar os nomes

das variáveis

 Escrever códigos legíveis com uma indexação

(68)

UEM

DMI

Unidades léxicas em um

Bloco de PL / SQL

Unidades léxicas:

 São uma sequência de caracteres incluindo letras,

dígitos, espaços, símbolos

 Podem ser classificados como sendo:

 Identificadores

 Delimitadores

 São símbolos que têm um significado especial:

(69)

UEM

DMI

69

Unidades léxicas em um

Bloco de PL / SQL (Cont.)

 Literais

 São alguns valores que são atribuídos a variáveis

 Caracter literal : ‘John’, ‘123’, ’12-JAN-1999’

 Numérico literal : 438, 12544.77

 Boolean literal : TRUE, FALSE e NULL

 Comentários

-- Para comentar numa linha

(70)

UEM

DMI

Identificadores

 São nomes usados para referenciar objectos em

PL/SQL

 Existem restricções

 Palavras reservadas não podem ser usadas como

identificadores

 Declare, begin, end, exception e mais…

 Palavra com espaço é inválida como Identificador  Se quisermos usar palavras reservadas ou

palavras com espaço, devemos colacar ente “ ”:

(71)

UEM

DMI

71

Delimitadores

 São símbolos que têm um significado especial

símbolo significado + Operador de adição

- Operador de subtração

* Operador de multiplicação

/ Operador de divisão

= Operador de igualdade

@ indicador de acesso remoto

; delimitador de declaração

símbolo significado

<> Operador de desigualdade

!= Operador de desigualdade

|| Operador de concatenação

-- Indicador de comentário de linha única

/* Delimitador de início de comentário

*/ Delimitador de fim de comentário

:= Operador de tarefa

(72)

UEM

DMI

Literais

Caracteres e data devem estar entre ‘ ‘:

 Nome_de_empregado := ‘Henderson’;

Números podem ser valores simples ou sob

notação científica

 2E5, significa 2*105 = 200000

Declarações podem ser feitas em várias

(73)

UEM

DMI

73

Comentários Dentro do

Código

 Os comentários não são executados pelo Servidor Oracle  Há dois tipod de comentários

 Para uma linha

 -- uma linha

 Para várias linhas

 /* início

... fim */  Exemplo DECLARE … sal NUMBER(9,2);

BEGIN -- secção que começa à execução /* Armazena o salário anual baseado

no valor mensal auferido por cada empregado*/ sal := sal_mes * 12;

(74)

UEM

DMI

Questão 8

Com os conhecimentos que se tem sobre

(75)

UEM

DMI

75

Exercícios

1. Liste os identificadores válidos e não válidos entre os seguintes:

a) hoje

b) p_nome

c) today´s day

d) #numero

e) NUMBER#

f) numero5

g) Numero_total_de_dias_de_duracao_do_curso_de_bases_de_dados_Oracle_10g

2. Qual é a vantagem do uso do %TYPE

3. Examine os seguintes blocos. Corrija-o caso seja necessário para garantir que corra sem problemas:

VARIABLE emp_salario NUMBER SET AUTOPRINT ON

DECLARE

p_nome BEGIN

SELECT sal INTO :emp_salario FROM emp WHERE empno=emp_numero; END; / PRINT emp_salario DECLARE

valor_inicial CONSTANT NUMBER(2); BEGIN

SELECT empno, deptno FROM emp

(76)

UEM

DMI

Exercícios

DECLARE

empregado_id NUMBER(2); salario NUMBER(6,2);

BEGIN

SELECT sal int salario FROM emp

WHERE empno=empregado_id; END;

/

4. Crie um bloco anónimo em que:

a) Imprima a data de hoje e a data de amanha, acompanhadas das seguintes mensagens: Hoje é dia: <dia> e amanha será dia: <dia>

(77)

UEM

DMI

77

Funções SQL no PL/SQL

 Disponíveis nas declarações procedural

1. Linha que devolve um número

2. Linha que devolve um caracter

3. Conversão de tipo de Dados

4. Data

5. Timestamp

6. GREATEST e LEAST

7. Funções Misturadas

 Não disponível nas declarações procedural

1. DECODE

(78)

UEM

DMI

Funções SQL no PL/SQL

Exemplo

Obtém o comprimento de caracteres

Converte o nome do empregado para letra

minúscula

tamanho INTEGER(5);

descricao VARCHAR2(70) := ‘Você pode usar este produto com o seu rádio.’;

(79)

UEM

DMI

79

Conversão de Tipo de

Dados

 Converte dados a tipos de dados comparáveis

 São de dois tipos:

1. Conversões implícitas

2. Conversões explícitas

 Algumas funções de conversão  TO_CHAR

 TO_DATE

 TO_NUMBER

(80)

UEM

DMI

Conversão de Tipo de

Dados (cont.)

Conversão implícita

Erro de conversão implícita

Conversão explícita

data_de_trabalho DATE := ’01-MAY-2000’ ;

data_de_trabalho DATE := ’February 02, 2000’ ;

data_de_trabalho DATE :=

(81)

UEM

DMI

81

Blocos Aninhados

 Blocos PL/SQL podem

ser aninhados

 A secção executável

(BEGIN … END;) pode

conter os Blocos Aninhados

 A secção de excepção

(82)

UEM

DMI

Alcance e Visibilidade da

Variável Num Bloco

SET SERVEROUTPUT ON; DECLARE

nome_de_pai VARCHAR(20) := 'Patrick'; data_de_ani DATE := '20-Apr-1972';

BEGIN

DECLARE

nome_de_filho VARCHAR(20) := 'Mike'; data_de_ani DATE := '11-DEC-2003'; BEGIN

DBMS_OUTPUT.PUT_LINE('Nome do Pai é ' || nome_de_pai); DBMS_OUTPUT.PUT_LINE('Nome do filho é ' || nome_de_filho);

(83)

UEM

DMI

83

Alcance e Visibilidade da

Variável Num Bloco(cont.)

 O resultado

 Alcance é o bloco do programa onde a variável é declarada e acessível.

 A visibilidade é o bloco do programa onde a variável pode ser acedida sem precisar de usar um qualificador

 As variáveis afectam as variáveis que são dentro dos seus blocos

 Se se tiver mesmo nome para duas variável distintas em blocos aninhados (exterior e interior), a variável interior tem prioridade.

Nome do Pai é Patrick Nome do filho é Mike

A data do aniversário é 11-DEC-03 A data do aniversário é 20-APR-72

(84)

UEM

DMI

Qualificar Um Identificador

 Esta qualificação é feita quando se pretende usar a variável exterior no bloco interior mesmo que este último tenha também declarado uma variável com o mesmo nome. Neste caso

podemos nomear bloco como sendo <<nome de bloco>>

SET SERVEROUTPUT ON; <<exterior>>

DECLARE

data_de_ani DATE := '20-Apr-1972'; BEGIN

DECLARE

(85)

UEM

DMI

85

Operadores no PL/SQL

Lógico Aritmética Concatenação

Parênteses para controlar ordem de operações

Operador Exponencial (**)

Similar ao SQL

Operador Operação

** Exponencial

+, - Identidade, negação *, / Multiplicação, divisão

+, -, || Adição, Subtracção, Concatenação =, <, >, <=, >=, <>, !=, ~=, ^=,

IS NOT NULL, LIKE, BETWEEN, IN

Comparação

(86)

UEM

DMI

Operadores no PL/SQL

(cont.)

Exemplos

 Incrementa o contador de loop

 Atribui um valor Booleano contador := contador + 1;

(87)

UEM

DMI

87

Notificação de Operador no

PL/SQL

 Quando se trabalha com valores nulos, podem-se

evitar alguns erros comuns, recordando as seguintes regras:

 Comparações envolvendo nulos sempre retornam

NULL.

 Aplicando o operador lógico NOT ao nulo retorna

NULL.

 Em declarações de controle condicional, se a

(88)

UEM

DMI

Formas de Programação

 Crie código que facilita a manutenção :  Documentando o código com comentários

 Desenvolvendo convenções para o código

 Desenvolvendo convenções para a nomenclatura de

identificadores e outros objectos

 Criando alinhamento de código

Categoria Caso convenção Exemplos

SQL maiúscula SELECT, INSERT

(89)

UEM

DMI

89

Alinhamento (

Indentation

)

de Código

É melhor fazer alinhamento dó código para a

sua própria legibilidade

Exemplo

BEGIN

IF x=0 THEN y=1;

END IF; END;

(90)

UEM

DMI

Sumário

SQL funções em PL/SQL

Blocos Aninhados

Conversões explícitas

(91)

UEM

DMI

91

Declarações de SQL no

PL/SQL

Retornar linhas da base de dados pelo uso

do comando SELECT

Alterar o conteúdo das linhas da base de

dados, usando comandos DML

Controlar a transacção com os comandos

(92)

UEM

DMI

Declarações de SELECT no

PL/SQL

Cláusula INTO é consultado??????

Consultas devem retornar somente uma linha

Exemplo

SET SERVEROUTPUT ON DECLARE

nome_de_emp VARCHAR2(25);

BEGIN

SELECT ename INTO nome_de_emp

(93)

UEM

DMI

93

Retorno de dados no

PL/SQL

Retorne a

hiredate

e a

sal

do empregado

especificado

Consultas devem retornar somente uma linha

Exemplo

DECLARE

emp_hiredate emp.hiredate%TYPE;

emp_sal emp.sal%TYPE;

BEGIN

SELECT hiredate, sal

INTO emp_hiredate, emp_sal FROM emp

WHERE empno=7369; END;

(94)

UEM

DMI

Retorno de dados no

PL/SQL (cont.)

Retorne o total dos salários de todos os

empregados do departamento especificado

Exemplo

SET SERVEROUTPUT ON DECLARE

sum_sal NUMBER(10, 2);

no_dept NUMBER NOT NULL := 10;

BEGIN

SELECT SUM(sal) -- função agregada

(95)

UEM

DMI

95

Manipulação de Dados

Usando PL/SQL

 Altere o conteúdo das tabelas da base de dados

usando comandos DML:

 INSERT …para inserir

 UPDATE…para actualizar  DELETE …para remover

(96)

UEM

DMI

Inserção de Dados

Adicionar uma nova instância de empregado

na tabela emp

Exemplo

BEGIN

INSERT INTO emp ( empno, ename, job , hiredate, sal, comm , deptno

) VALUES

(97)

UEM

DMI

97

Actualização de Dados

Aumentar o salário de todos os empregados

que tenham a categoria CLERK

Exemplo

DECLARE

sal_aumento emp.sal%TYPE := 800; BEGIN

UPDATE emp

SET sal = sal + sal_aumento

WHERE job = ‘CLERK’;

(98)

UEM

DMI

Eliminação de Dados

Eliminar as linhas que pertencem ao

departamento 10 da tabela emp.

Exemplo

DECLARE

d_no emp.deptno := 10;

BEGIN

(99)

UEM

DMI

99

Fusão de Linhas

 Inserir ou actualizar linhas na tabela emp_copiada  Ao inserir uma nova linha, se já existir uma linha que tem

mesmo valor de PK, actualize-a em vez de inserí-la.

DECLARE

e_no emp.empno := 7999; BEGIN

MERGE INTO emp_copiada c USING emp e ON (e.empno=e_no)

WHEN MATCHED THEN

UPDATE SET c.ename = e,ename, c.sal=e.sal WHEN NOT MATCHED THEN

INSERT VALUES(e.empno, e.ename, e.job, e.mgr, e.hiredate, e.sal, e.comm, e.deptno);

(100)

UEM

DMI

Questão

O seu chefe disse que

 O seu programa retorna apenas uma linha, não

é?

 Não se pode efectuar uma consulta que retorna

(101)

UEM

DMI

101

Como é que se retornam várias

linhas no Bloco do PL/SQL

Já foi aprendido como fazer uma consulta de

SQL que retorna uma única linha no Bloco do

PL/SQL

Deve-

se usar SELECT … INTO … FROM …

(102)

UEM

DMI

Cursor de SQL

 CURSOR é uma referência à área de memória

privada alocada pelo Servidor Oracle

SELECT (seleccionar)

(103)

UEM

DMI

103

Cursor de SQL

CURSOR é

indicador

do conjunto

executado das linhas retornadas

Estas linhas são executadas

respectivamente pelo Servidor de Oracle

Há dois tipos de cursores

 Cursores implícitos

 São criados e manejados interiormente pelo servidor de Oracle para processar a declaração de SQL

 Cursores explícitos

(104)

UEM

DMI

Questão

O Edson perguntou:

 Eu quero saber qual foi o número de linha

executado (seleccionado, inserido, actualizado e removido) pela declaração de SQL

(105)

UEM

DMI

105

Atributos de Cursor SQL

para cursores implícitos

 Use os atributos do Cursor SQL, para poder

testar o resultado da sua declaração de SQL

SQL% FOUND Atributo Booleano que retorna VE RDADE IRO se a m ais recente

declaração de SQL devolver pelo m enos

um a linha.

SQL% NOTFOUND Atributo Booleano que retorna VE RDADE IRO se a m ais recente

declaração de SQL não devolver

nenhum a linha.

(106)

UEM

DMI

Atributos de Cursor SQL para

cursores implícitos (cont. 1)

 Remover as linhas que contém o número de

empregado especificado, da tabela emp. Exibir a seguir o número de linhas removidas

 Exemplo

VARIABLE linhas_removidas VARCHAR2(30) DECLARE

e_no emp.empno%TYPE := 7635; BEGIN

(107)

UEM

DMI

107

Atributos de Cursor SQL para

cursores implícitos (cont. 2)

Exemplo

SET SERVEROUTPUT ON DECLARE

nome emp.ename%TYPE; BEGIN

SELECT ename INTO nome FROM EMP WHERE empno=7788; DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);

(108)

UEM

DMI

Sumário

Emissão de Declarações DML, declarações

de controle de transacção e declarações de

DDL em PL/SQL

Clausula de INTO que é obrigatório para

SELECT em PL/SQL

CURSOR implícito e explícito

Atributos de CURSOR implícito

(109)

UEM

DMI

109

Questão

O seu colega, o Edson disse:

 Eu ouvi dizer que PL/SQL tem estruturas de

controle. É verdade?

 Agora, eu tenho de usar a ordem de divergência

no PL/SQL, como também tenho de repetir processos.

(110)

UEM

DMI

Controle de Fluxo de

Execução

Pode-se mudar o fluxo lógico das

declarações dentro do bloco do PL/SQL,

usando estruturas de controle

 Declaração IF

 Expressão CASE

(111)

UEM

DMI

111

Diagrama de IF, CASE e

LOOP

 IF deve diferenciar o processo mediante uma condição

 CASE separa os casos mediante os valores da condição

 LOOP repete processo enquanto a condição for verdadeira

Condição Falso Verdadeiro IF Condição CASE

Processo 1 Processo 3

Processo 2 Processo 1

Condição

Falso

Verdadeiro

LOOP

Valor 1 Valor 2 Valor 3

(112)

UEM

DMI

Declaração IF

 IF é semelhante à estrutura de IF de qualquer

linguagem procedural

 Sintaxe

IF condição THEN

Declarações;

[ ELSIF condição THEN

Declarações;]

[ ELSE

Declarações;]

(113)

UEM

DMI

113

Declarações simples de IF

a) Minha_idade é 25

b) Condição sempre deve retornar Verdadeiro ou Falso ou Nulo

c) Nesta condição minha_idade é menor do que 11. O resultado da

proposição é falso

d) Neste caso, as declarações após o THEN não são executadas

 O que deve ser alterado, para que as declarações sejam executadas?

DECLARE

minha_idade NUMBER := 25; BEGIN

IF minha_idade < 11 THEN

DBMS_OUTPUT.PUT_LINE(‘Eu sou criança.’); -- Não é executado

END IF;

(114)

UEM

DMI

Declarações de IF THEN

ELSE

SET SERVEROUTPUT ON DECLARE

minha_idade NUMBER := 31; BEGIN

IF minha_idade < 11 THEN

DBMS_OUTPUT.PUT_LINE(‘Eu sou criança.’); -- Não é executado

ELSE

DBMS_OUTPUT.PUT_LINE(‘Eu não sou criança!!!’);

END IF; END;

(115)

UEM

DMI

115

Cláusula de IF ELSIF ELSE

 IF ELSIF ELSE é executado por ordem.

DECLARE

minha_idade NUMBER := 31; BEGIN

IF minha_idade < 11 THEN

DBMS_OUTPUT.PUT_LINE(‘Eu sou criança.’);

ELSIF minha_idade < 25 THEN

DBMS_OUTPUT.PUT_LINE(‘Eu sou rapaz.’);

ELSIF minha_idade < 40 THEN

DBMS_OUTPUT.PUT_LINE(‘Eu sou meia-idade.’); ELSE

DBMS_OUTPUT.PUT_LINE(‘Eu já tou a ficar velhinho’);

END IF; END;

(116)

UEM

DMI

Valores de NULL na

Declarações IF

DECLARE

minha_idade NUMBER; BEGIN

IF minha_idade < 11 THEN

DBMS_OUTPUT.PUT_LINE(‘Eu sou criança.’);

ELSE

DBMS_OUTPUT.PUT_LINE(‘Eu não sou criança!!!’);

END IF; END;

(117)

UEM

DMI

117

Expressões de CASE

 Expressão de CASE selecciona o resultado duma

expressão satisfeita

 Para seleccionar o resultado, a declaração CASE

usa expressões. O valor retornado por estas

expressões é usado para seleccionar uma de várias alternativas

 Sintaxe

CASE [selector]

WHEN expressão1 THEN resultado1

WHEN expressão2 THEN resultado2

WHEN expressãoN THEN resultadoN

[ELSE resultadoN+1]

END;

(118)

UEM

DMI

Exemplo : CASE

SET SERVEROUTPUT ON SET VERIFY OFF

DECLARE

nivel CHAR(1) := UPPER('&nivel'); avaliacao VARCHAR2(20);

BEGIN

avaliacao :=

CASE nivel

WHEN 'A' THEN 'Excelente' WHEN 'B' THEN 'Muito Bom' WHEN 'C' THEN 'Bom'

(119)

UEM

DMI

119

Exemplo : CASE Pesquisada

SET SERVEROUTPUT ON SET VERIFY OFF

DECLARE

nivel CHAR(1) := UPPER('&nivel'); avaliacao VARCHAR2(20);

BEGIN

avaliacao :=

CASE -- Não há variável de selecção (selector) WHEN nivel= 'A' THEN 'Excelente'

WHEN nivel IN ('B', 'C') THEN 'Bom' ELSE 'Não há esse nível ' || nivel END;

DBMS_OUTPUT.PUT_LINE('Nível é ' || nivel || '. ' || avaliacao || '.'); END;

(120)

UEM

DMI

Controlando Nulos

 Ao trabalhar com valores nulos, evite alguns erros

comuns, usando as seguintes normas:

 Comparações simples envolvendo nulos sempre retornam

NULL

 A aplicação do operador lógico de NOT à um nulo, retorna

NULL

 Em declarações de estruturas controle, se a condição

retornar NULL, as declarações associadas à condição não são executadas

X := 5;

Y := NULL;

X := NULL; Y := NULL;

(121)

UEM

DMI

121

Tabelas de lógica

Resultado

TRUE TRUE TRUE

TRUE FALSE FALSE

FALSE TRUE FALSE

FALSE FALSE FALSE

TRUE NULL NULL

NULL TRUE NULL

FALSE NULL FALSE

NULL FALSE FALSE

NULL NULL NULL

AND Resultado

TRUE TRUE TRUE

TRUE FALSE TRUE

FALSE TRUE TRUE

FALSE FALSE FALSE

TRUE NULL TRUE

NULL TRUE TRUE

FALSE NULL NULL

NULL FALSE NULL

NULL NULL NULL

OR

NOT Resultado

TRUE FALSE

FALSE TRUE

(122)

UEM

DMI

Condições Booleanas

 Qual é o valor de bandeira em cada caso?

dinheiro_bandeira banco_bandeira bandeira

TRUE TRUE

TRUE FALSE

NULL TRUE

NULL FALSE

(123)

UEM

DMI

123

Controle de Repetição:

Declarações de LOOP

 PL/SQL disponibiliza várias versões de estruturas

LOOP, para repetir declaração ou sequência de declarações

 LOOP básico

 Executa acções repetitivas sem condições globais

 WHILE LOOP

 Executa as acções repetitivas baseado numa condição

 FOR LOOP

(124)

UEM

DMI

LOOP Básico

Sintaxe

Exemplo

LOOP

Declaração1;

EXIT [WHEN condição];

END LOOP;

(125)

UEM

DMI

125

WHILE LOOP

Use WHILE LOOP para repetir declarações

enquanto a condição inicial for

verdadeira

Sintaxe

Exemplo

WHILE condição LOOP

Declaração1;

END LOOP;

WHILE idade < 10 LOOP idade := idade + 1;

(126)

UEM

DMI

FOR LOOP

 Use FOR LOOP para repetir declarações que tem

contador definido num intervalo

 Sintaxe

FOR contador IN [REVERSE] limite inferior .. limite superior LOOP

Declaração1; Declaração2;

(127)

UEM

DMI

127

Alinhando Repetições

Exemplo

SET SERVEROUTPUT ON DECLARE

BEGIN

FOR i IN 1..3 LOOP

DBMS_OUTPUT.PUT_LINE(i || ' '); FOR j IN 1..5 LOOP

DBMS_OUTPUT.PUT_LINE(j); END LOOP;

END LOOP; END;

(128)

UEM

DMI

Sumário

Condicional (declaração de IF)

Expressões de CASE e declarações de

CASE

LOOP

(129)

UEM

DMI

129

Questão

O Edson veio perguntar

 Eu quero usar variáveis que armazenam vários

tipos de dados.

(130)

UEM

DMI

Tipos de dados compostos

Registros de PL/SQL

Colecções de PL/SQL

 Tabelas de INDEX BY ou ordens associativas

 Tabela agregada

(131)

UEM

DMI

131

Registros do PL/SQL

 É uma estrutura de unidade de dados

 Deve conter pelo menos um componente de alguma

escalar chamado campo

 Sintaxe

TYPE nome_de_tipo IS RECORD

(declaração_de_campo [, declaração_de_campo] …);

Identificador nome_de_tipo;

Nome_de_campo { tipo_de_campo ou variável%TYPE

ou tabela.coluna%TYPE ou tabela%ROWTYPE}

[[NOT NULL] {:= ou DEFAULT} expr]

(132)

UEM

DMI

Criando Registros do

PL/SQL

Declara variáveis para armazenar ename, job

e sal da tabela emp

Exemplo

TYPE tipo_registro_emp IS RECORD -- Novo tipo de dados

(ename VARCHAR2(10), job VARCHAR2(9), sal NUMBER(7,2));

(133)

UEM

DMI

133

Estrutura de Registros de

PL/SQL

Campo1(tipo) Campo2(tipo) Campo3(tipo)

 Exemplo empno

NUMBER(4)

ename

VARCHAR2(10) job

VARCHAR2(9)

Campos no registro são acessados com o

nome do registro. Para referir ou inicializar

cada campo, use o ponto

(134)

UEM

DMI

Questão

Você pensou assim:

 Não há maneira de as variáveis compostas

(135)

UEM

DMI

135

Atributo %ROWTYPE

 Sintaxe

 Vantagens de uso de %ROWTYPE

 Usando registro, o número de colunas e seu tipo de dados

na base de dados, não precisa ser sabido

 O número de colunas e o seu tipo de dados na base de

dados usando registro, podem alterar sem afectar o seu uso

 O atributo é muito útil quando a declaração SELECT

retorna uma linha inteira duma tabela

DECLARE

(136)

UEM

DMI

Exemplo:

Atributo %ROWTYPE

DEFINE emp_id = 7999; DECLARE

reg_emp emp%ROWTYPE; BEGIN

SELECT * INTO reg_emp FROM emp WHERE empno=&emp_id;

/* Insere a nova linha para tabela de emp_aposentado */ INSERT INTO emp_aposentado(empno, ename, job, mgr, hiredate, leavedate, sal, comm, deptno)

(137)

UEM

DMI

137

Inserção de Registros que

Usam %ROWTYPE

DEFINE emp_id = 7999; DECLARE

reg_emp emp_aposentado%ROWTYPE; BEGIN

SELECT * INTO reg_emp FROM emp; WHERE empno=&emp_id;

/* Insere a nova linha para tabela de emp_aposentado */ INSERT INTO emp_aposentado(empno, ename, job, mgr, hiredate, leavedate, sal, comm, deptno)

VALUES(reg_emp.empno, reg_emp.ename, reg_emp.job, reg_emp.mgr, reg_emp.hiredate, SYSDATE, reg_emp.sal,

reg_emp.comm, reg_emp.deptno);

(138)

UEM

DMI

Actualização duma Linha na

Tabela Usando Registro

SET SERVEROUTPUT ON SET VERIFY OFF

DEFINE empno=7369 DECLARE

reg_emp emp_aposentado%ROWTYPE;

BEGIN

SELECT * INTO reg_emp FROM emp_aposentado;

reg_emp. Leavedate := SYSDATE;

UPDATE emp_aposentado SET ROW = reg_emp WHERE empno=&empno;

END;

(139)

UEM

DMI

139

Questão

O seu colega veio perguntar:

 No caso de registos, nós podemos retornar os

todos os dados de uma linha inteira

 Agora, é possível retornar todos os dados duma

coluna?

coluna1 coluna2 coluna3

TOM 200 MAPUTO

SMITH 300 MATOLA

JOHN 250 ZIMPETO

TOM 200 MAPUTO

Registo

(140)

UEM

DMI

Tabelas de INDEX BY ou

Ordens associativas

 Ordens associativas são estruturas do PL/SQL com

duas colunas:

 Inteiro ou caracter de tipo de chave primária

 Coluna do tipo escalar ou do tipo de dados de registro

 Não são compelido no tamanho. Porém o tamanho

depende de valores da chave de tipo de dados

 Se coluna for do tipo escalar pode possuir somente um

(141)

UEM

DMI

141

Criando tabela de INDEX BY

Sintaxe

Exemplo : Declarar o INDEX BY tabela para

armazenar o nome de empregado

TYPE nome_de_tipo IS TABLE OF

{tipo_de_coluna ou variável%TYPE ou tabela.coluna%TYPE} [NOT NULL] ou tabela%ROWTYPE

[INDEX BY PLS_INTEGER ou BINARY_INTEGER ou VARCHAR2(tamanho)] identificador tipo_de_nome;

TYPE tipo_tabela_ename IS TABLE OF

emp.ename%TYPE

INDEX BY PLS_INTEGER;

(142)

UEM

DMI

Estrutura de Tabela de

INDEX BY

PLS_INTEGER Unique Key

1 5 3

Escalar Valor

Jones Smith Maduro

(143)

UEM

DMI

143

Criação de tabela de INDEX

BY

DECLARE

TYPE tipo_tabela_ename IS TABLE OF emp.ename%TYPE

INDEX BY PLS_INTEGER; -- Declaração do tipo de variável TYPE tipo_tabela_hiredate IS TABLE OF DATE

INDEX BY PLS_INTEGER; -- Declaração de tipo de variável

tabela_ename tipo_tabela_ename; -- Declaração de tabela ename

tabela_hiredate tipo_tabela_hiredate; -- Declaração de tabela hiradate

BEGIN

tabela_ename(1) := ‘CAMERON’; tabela_hiredate(8) := SYSDATE + 7;

IF tabela_ename.EXISTS(1) THEN

INSERT INTO emp(empno, ename) VALUES(7999, tabela_ename(1));

END IF;

END;

(144)

UEM

DMI

Uso de Métodos de Tabela

de INDEX BY

M étodo Descrição

E XISTS(n) Retorna Verdadeiro se existe o n-elem ento na tabela de PL/SQL

COUNT Retorna o núm ero de elem entos contidos actualm ente na tabela de PL/SQL FIRST

LAST

Retorna prim eiro ou últim o núm ero de index na tabela de PL/SQL.

Retorna NULL se a tabela de PL/SQL estiver vazia.

PRIOR(n) Retorna o núm ero de index que precede o index n na tabela de PL/SQL

NE XT(n) Retorna o núm ero de index que sucede ao index n na tabela de PL/SQL

DE LE TE DE LE TE rem ove todos os elem entos de tabela de PL/SQL DE LE TE (n) rem ove elem ento n de tabela de PL/SQL

DE LE TE (m , n) rem ove todos os elem entos no intervalo m …n de tabela de

(145)

UEM

DMI

145

Registros de Tabela de

INDEX BY

Define um variável de tabela de INDEX BY

para guardar uma linha inteira de tabela

DECLARE

TYPE tipo_tabela_dept IS TABLE OF dept%ROWTYPE INDEX BY PLS_INTEGER;

(146)

UEM

DMI

Registros de Tabela de

INDEX BY (cont.)

empno ename job mgr sal deptno

Tabela emp

TYPE tipo_tabela_emp IS TABLE OF emp%ROWTYPE

(147)

UEM

DMI

147

Exemplo de Tabela de

INDEX BY de Registros

SET SERVEROUTPUT ON DECLARE

TYPE tipo_tabela_emp IS TABLE OF emp%ROWTYPE

INDEX BY PLS_INTEGER; -- Declaração do tipo de ROWTYPE

a_minha_tabela_emp tipo_tabela_emp; min_count := 7996;

max_count := 7999; BEGIN

FOR i IN min_count..max_count LOOP

SELECT * INTO a_minha_tabela_emp(i) FROM emp WHERE empno=i; END LOOP;

FOR i IN a_minha_tabela_emp.FIRST.. a_minha_tabela_emp.LAST LOOP DBMS_OUTPUT.PUT_LINE(a_minha_tabela_emp(i).ename);

END LOOP; END;

(148)

UEM

DMI

Tabela Composta

(Aninhada)

Tabela composta tem semelhante de INDEX

BY Funcionalmente

 Chave é a partir de 1, chave não é possível valor

(149)

UEM

DMI

149

VARRAY:

Variable

-

size

arrays

 VARRAY é semelhante a tabelas de PL/SQL, sendo

que o VARRAY é constrangido pelo tamanho.

 VARRAY é válido ao nível do schema

 Exemplo:

TYPE tipo_varray_loc IS VARRAY(3) OF dept.loc%TYPE;

escritorios tipo_varray_loc;

O tamanho deste VARRAY é restrito a 3

Se tentar inicializar o VARRAY com mais do que três elementos,

Imagem

Tabela emp

Referências

Documentos relacionados

O objetivo desta pesquisa foi investigar o papel da Educação Física na Educação Infantil, considerando-se os objetivos gerais, objetivos específicos, os conteúdos da

98: “En- quanto não permitir o fundo de custeio dos serviços de inspeção, a designação de inspetores especializados para orientação do en- sino da Musica e dos exercícios

sem discriminação”; “...o ensino inclusivo será uma oportunidade das pessoas portadoras de necessidades especiais de mostrar suas potencialidades”; “espero que esta

Aprendizado geral dos jogos esportivos de forma implícita - lúdica Escola da Bola - O ABC da Aprendizagem do Jogo Implícito / Lúdico. O Problema / As causas A solução:

Savants são pessoas que demonstram capacidades superiores em uma inteligência, enquanto suas outras inteligências funcionam num baixo ritmo.. Ex.: Rain Man (baseado numa

Mediação significa que o t rabalho do professor é viabilizar a relação at iva do aluno com a mat éria de est udo, at ravés de obj et ivos, cont eúdos, mét odos e formas

Anche dopo il rilascio bisogna restare nella posizione precedentemente assunta fino al momento dell'impatto della freccia sul bersaglio ed evitare bruschi cali di tensione

1 - Entrada da mão muito próxima da cabeça. 2 - Entrada da mão fora da largura do ombro.. 3 -Tração com o braço fora do alinhamento do corpo.. 4 - Batida com elevação excessiva