64
PL/SQL- PL/SQL- Fundamentos Fundamentos Instrutor: Márcio Mendonça 1 Oracle Database 11g 1

Oralcle PL SQL Parte I

Embed Size (px)

DESCRIPTION

Oralcle PL SQL Parte I

Citation preview

Page 1: Oralcle PL SQL Parte I

PL/SQL- PL/SQL- FundamentosFundamentos

Instrutor: Márcio Mendonça

1

Oracle Database 11g1

Page 2: Oralcle PL SQL Parte I

É uma linguagem de programação utilizada para acessar e modificar dados num banco de dados Relacional.

Ela é integrada ao servidor de banco de dados de modo que o seu código possa ser processado de maneira rápida e eficiente.

O que é PL/SQL?O que é PL/SQL?

Instrutor: Márcio Mendonça

2

Oracle Database 11g

Page 3: Oralcle PL SQL Parte I

Um programa pode ser escrito em blocos, com variáveis locais e tratamento de erros;

Performance;Potabilidade - pode ser usado em qualquer plataforma

que acesse um banco de dados Oracle.O fluxo do programa pode ser

determinado através de comandos de desvio.

Benefícios da LinguagemBenefícios da Linguagem

Instrutor: Márcio Mendonça

3

Oracle Database 11g

Page 4: Oralcle PL SQL Parte I

Estrutura do PL/SQLEstrutura do PL/SQL

O PL/SQL é uma linguagem estruturada em blocos lógicos que podem conter um número qualquer de sub-blocos aninhados.

Um bloco PL/SQL pode ser um bloco anônimo ou um sub-programa ou uma trigger.

Instrutor: Márcio Mendonça

4

Oracle Database 11g

Page 5: Oralcle PL SQL Parte I

Blocos EstruturadosBlocos Estruturados

DECLARE(Opcional)Variáveis, cursores, definição de exceções

definidas pelo desenvolvedorBEGIN (Obrigatório)

Declaração SQL Declaração PL SQL EXCEPTION (Opcional)

Ações a serem tomadas caso ocorra algum erroEND; (Obrigatório)

Instrutor: Márcio Mendonça

5

Oracle Database 11g

Page 6: Oralcle PL SQL Parte I

Bloco Anônimo => É um bloco de comandos sem nome. É declarado na aplicação no ponto em que será executado e passado para a execução em tempo de execução.

Bloco AnônimoBloco Anônimo

Instrutor: Márcio Mendonça

6

Oracle Database 11g

Page 7: Oralcle PL SQL Parte I

Consistem em Procedures e Funções.

Podem ser armazenados no banco de dados como objetos independentes, como parte de um pacote ou como métodos de um tipo de objeto.

Sub-ProgramasSub-Programas

Instrutor: Márcio Mendonça

7

Oracle Database 11g

Page 8: Oralcle PL SQL Parte I

Consistem em um bloco PL/SQL que está associado a um evento que ocorre no banco de dados.

TriggersTriggers

Instrutor: Márcio Mendonça

8

Oracle Database 11g

Page 9: Oralcle PL SQL Parte I

Sub-programas definidos dentro de um outro sub-programa ou dentro de um bloco PL/SQL, são sub-programas locais e não podem ser referenciados por outras aplicações.

Linhas de comando podem ser divididas em diversas linhas.

Identificadores devem começar com uma letra e conter, no máximo, 30 caracteres;

Sintaxe Básica do PL/SQLSintaxe Básica do PL/SQL

Instrutor: Márcio Mendonça

9

Oracle Database 11g

Page 10: Oralcle PL SQL Parte I

Campos caracteres e datas devem ser usados entre aspas simples;

Comentários são delimitados por: /* */ e podem conter diversas linhas.

Comentários de apenas uma linha são iniciados por '--' (pode ser em linhas que já tenham comandos).

Palavras reservadas não podem ser usadas;

Sintaxe Básica do PL/SQLSintaxe Básica do PL/SQL

Instrutor: Márcio Mendonça

10

Oracle Database 11g

Page 11: Oralcle PL SQL Parte I

Símbolos Simples do PL/SQLSímbolos Simples do PL/SQL

Instrutor: Márcio Mendonça

11

Oracle Database 11g

Page 12: Oralcle PL SQL Parte I

Símbolos Compostos do PL/SQLSímbolos Compostos do PL/SQL

Instrutor: Márcio Mendonça

12

Oracle Database 11g

Page 13: Oralcle PL SQL Parte I

Regras de Estrutura de BlocosRegras de Estrutura de Blocos

O mínimo requerido em um bloco são os comandos BEGIN e END delimitando as ações que serão executadas.

Se o bloco PL/SQL precisar de definição de variáveis, conterá, também, a seção DECLARE.

Instrutor: Márcio Mendonça

13

Oracle Database 11g

Page 14: Oralcle PL SQL Parte I

Blocos AninhadosBlocos Aninhados

Blocos podem estar aninhados, inclusive na seção de EXCEPTION.

Instrutor: Márcio Mendonça

14

Oracle Database 11g

Page 15: Oralcle PL SQL Parte I

Blocos aninhadosBlocos aninhadosBEGIN Ações do bloco principal

DECLARE Declaração de objetos BEGIN Ações do bloco interno EXCEPTION O que fazer na ocorrência de erros do bloco interno END;

Outras ações do bloco principalEXCEPTION WHEN erro THEN BEGIN Ações do bloco interno do EXCEPTION EXCEPTION Ações a serem tomadas na ocorrência de erros no bloco interno de EXCEPTION. END;END;

Instrutor: Márcio Mendonça

15

Oracle Database 11g

Page 16: Oralcle PL SQL Parte I

Variáveis Variáveis

Instrutor: Márcio Mendonça

16

Oracle Database 11g

Page 17: Oralcle PL SQL Parte I

Uso de VariáveisUso de Variáveis•As variáveis podem ser utilizadas para armazenar temporariamente os dados e manipular valores.

•O nome atribuído a uma variável deve ter no máximo 30 posições. Pode possuir letras, números e caracteres especiais como underscore, ponto simples, dólar.

•Elas devem ser declaradas e inicializadas na seção declarativa. Usada e atribuída novos valores na seção de executáveis. Passada como parâmetros em subprogramas PL/SQL

•Não existe distinção entre letras maiúsculas e minúsculas.

Instrutor: Márcio Mendonça

17

Oracle Database 11g

Page 18: Oralcle PL SQL Parte I

Declaração de VariáveisDeclaração de Variáveis

Nome_da_variável [CONSTANT] datatype [NOT NULL] [{:= | DEFAULT} valor];Onde nome_da_variável é o identificador, datatype é tipo e valor é o conteúdo inicial da variável. EX:DECLARE

v_dataInicial DATE;v_contador BINARY_INTEGER NOT NULL := 0;v_nome VARCHAR2(20);c_PI CONSTANT NUMBER DEFAULT 3.14;

Instrutor: Márcio Mendonça

18

Oracle Database 11g

Page 19: Oralcle PL SQL Parte I

Tipos de DadosTipos de Dados

O Oracle PL/SQL possui diferentes tipos de dados (datatypes) para atender suas necessidades, que são divididos nas seguintes categorias:•CHARACTER, •NUMBER, •DATE, •LOB, •BOOLEANOS, •%TYPE

Instrutor: Márcio Mendonça

19

Oracle Database 11g

Page 20: Oralcle PL SQL Parte I

CharacterCharacter

CHAR(<n>) armazena string de tamanho fixo. Tamanho default 1, máximo 32.767. Subtipo: CHARACTER

VARCHAR2(<n>) armazena string de tamanho variável. É possível armazenar string de até 32.767 bytes. Subtipo: STRING

VARCHAR(<n>) sinônimo para o tipo VARCHAR2.

NCHAR(<n>) e NVARCHAR2(<n>) possuem as mesmas características dos tipos CHAR e VARCHAR2 e são usados para armazenar dados NLS (National Language Support). A arquitetura Oracle NLS permite armazenar, processar e recuperar informações em linguagens nativas.

LONG é um tipo de dados que se tornou “obsoleto” com a chegada dos tipos LOB (Large Object). O tipo LONG armazena strings de tamanho variável de no máximo 32.760 bytes.Instrutor: Márcio Mendonça

20

Oracle Database 11g

Page 21: Oralcle PL SQL Parte I

NuméricoNuméricoUsado para armazenar dados numéricos com precisão de até 38 digitos.

NUMBER(<x>, <y>) onde <X> corresponde ao número de dígitos e <Y> o número de casas decimais. Valores inseridos em colunas numéricas com número de casas decimais menor que o dado inserido serão arredondados. Subtipos: DEC, DECIMAL, DOUBLE PRECISION, FLOAT, INTEGER, INT, NUMERIC, REAL, SMALLINT.

BINARY_INTEGER utilizado para armazenar inteiros com sinal, que variam de –2147483647 a 2147483647. Requerem menos memória que tipos NUMBER. Subtipos: NATURAL (n>=0), NATURALN (n>=0 not null), POSITIVE (n>0), POSITIVEN (n>0 not null), SIGNTYPE (-1, 0, 1).

PLS_INTEGER Possui as mesmas características do tipo BINARY_INTEGER, entretanto possui melhor performance para cálculos.

Instrutor: Márcio Mendonça

21

Oracle Database 11g

Page 22: Oralcle PL SQL Parte I

DataData

O tipo DATE permite valores de data e hora. O formato padrão é definido pelo parâmetro NLS_DATE_FORMAT. O Oracle armazena internamente a data em formato de número juliano com a parte fracionária usada para controlar a hora. Uma data Juliana corresponde ao número de dias desde 1 de Janeiro de 4712 A.C.

Para operações aritméticas com datas no Oracle, basta adicionar ou subtrair números inteiros ou fracionários. Por exemplo, SYSDATE + 1 para somar uma dia, 1/24 para acrescentar uma hora, 1/(24x60) ou 1/1440 para acrescentar 1 minuto e 1/(24x60x60) ou 1/86400 para um segundo.

Instrutor: Márcio Mendonça

22

Oracle Database 11g

Page 23: Oralcle PL SQL Parte I

LobLob

Large Object (LOB) datatypes são usado para armazenar dados não estruturados como imagens, arquivos binários. Os tipos LOBs podem armazenar até 4GB de informação. A manipulação dos tipos LOB é feita através da package DBMS_LOB.

- BLOBBinary Large Object: Armazena até 4GB de dados binários no banco

-CLOBCharacter Large Object: Armazena até 4GB de dados caráter

- BFILEBinary File: Armazena até 4GB de dados em arquivos binários externos. Uma coluna BFILE armazena um ponteiro para o arquivo armazenado no sistema operacional.

Instrutor: Márcio Mendonça

23

Oracle Database 11g

Page 24: Oralcle PL SQL Parte I

BooleanoBooleano

O único tipo de dados na família booleana é o BOOLEAN.

Variáveis booleanas são utilizadas em estruturas de controle da PL/SQL como as instruções IF-THEN-ELSE e de LOOP. Podem conter apenas os valores TRUE, FALSE ou NULL.

Instrutor: Márcio Mendonça

24

Oracle Database 11g

Page 25: Oralcle PL SQL Parte I

Utilizando %TYPEUtilizando %TYPE

Utilizado para declarar uma variável com o mesmo tipo de uma coluna de alguma tabela, ex:

DECLAREv_Nome STUDENTS.FIRST_NAME%TYPE;v_Idade PLS_INTEGER NOT NULL :=0;v_IdadeTemp v_Idade%TYPE; --não herda restrição

nem valor default

Instrutor: Márcio Mendonça

25

Oracle Database 11g

Page 26: Oralcle PL SQL Parte I

Variáveis de HostVariáveis de Host

São variáveis declaradas no ambiente operacional que podem ser referenciadas nos comandos PL/SQL.

Sintaxe: :nome_da_variável := expressão;

Onde expressão pode ser uma variável, um valor, uma expressão usada para chegar a um valor específico.

Instrutor: Márcio Mendonça

26

Oracle Database 11g

Page 27: Oralcle PL SQL Parte I

Conversão entre Tipos de Conversão entre Tipos de DadosDados

Quando possível, a PL/SQL converterá automaticamente (conversão implícita) tipos dentro da mesma família e entre as famílias de tipos de dados:Caracteres e números Caracteres e datas

Instrutor: Márcio Mendonça

27

Oracle Database 11g

Page 28: Oralcle PL SQL Parte I

TO_CHARConverte seu argumento em um tipo VARCHAR2

TO_DATEConverte seu argumento em um tipo DATE

TO_NUMBERConverte seu argumento em um tipo NUMBER

Funções mais utilizadas para Funções mais utilizadas para conversão explícita de dadosconversão explícita de dados

Instrutor: Márcio Mendonça

28

Oracle Database 11g

Page 29: Oralcle PL SQL Parte I

Funções de caracter Funções de caracter que retornam que retornam valores caractervalores caracter

Instrutor: Márcio Mendonça

29

Oracle Database 11g

Page 30: Oralcle PL SQL Parte I

CHR (x[using nchar_cs])Retorna o caractere que tem o valor equivalente ao x no conjunto de caracteres do banco de dados. CHR e ASCII são funções opostas.

CONCAT (string1, string2)Retorna string1 concatenada com string2. Essa função é idêntica ao operador || .

INITCAP (string) Retorna string com o primeiro caractere de cada palavra em letra maiúscula e os caracteres restantes de cada palavra em letras minúsculas.

Funções Pré DefinidasFunções Pré Definidas

Instrutor: Márcio Mendonça

30

Oracle Database 11g

Page 31: Oralcle PL SQL Parte I

LOWER (string) Retorna string com todos os caracteres em letras minúsculas. Quaisquer caracteres que não forem letras permanecem intactos. Se string tiver o tipo de dados CHAR, o resultado também será CHAR. Se string for VARCHAR2, o resultado será VARCHAR2.

LPAD (String1, x[string2])Retorna string1 preenchida à esquerda até o comprimento x com os caracteres em string2.

LTRIM (String1,String2)Retorna string1 com os caracteres mais à esquerda aparecendo em string2 removidos. string2 assume o padrão de um espaço em branco.

Funções Pré DefinidasFunções Pré Definidas

Instrutor: Márcio Mendonça

31

Oracle Database 11g

Page 32: Oralcle PL SQL Parte I

REPLACE (string, string_a_pesquisar [string_substituta])Retorna string com cada ocorrência de string_a_pesquisar susbstituída por string_substituta.

RPAD (string1, x, [string2])Retorna string1, com os caracteres mais à direita que aparecem em string2, removidos. A string2 assume o padrão de um espaço em branco.

TRANSLATE (string, str_de, str_para)Retorna string com todas as ocorrências de cada caractere em str_de_substituído pelo caractere correspondente em str_para.

Funções Pré DefinidasFunções Pré Definidas

Instrutor: Márcio Mendonça

32

Oracle Database 11g

Page 33: Oralcle PL SQL Parte I

TRIM([{{LEADING|TRAILING|BOTH}[aparar_char])|aparar_char}FROM]string)Retorna string com as ocorrências inicial, final ou ambas de aparar_char removidas.

UPPER (string) Retorna string com todas as letras em maiúsculas.

SUBSTRSintaxe: SUBSTR (string, a[,b])Retorna uma parte da string que inicia no caractere a, com o comprimento dos caracteres b. Se a for 0, é tratado como 1 (o início da string). Se a for positivo, os caracteres que retornam são contados da esquerda. Se a for negativo, os caracteres retornam iniciando do final da string e são contados da direita. Se b não estiver presente, a string inteira é assumida como padrão. Se b for menor que 1, NULL é retornado. Se um valor de ponto flutuante for passado para a e b, o valor primeiro é truncado para um inteiro. O tipo de retorno é sempre do mesmo tipo da string.

Funções Pré DefinidasFunções Pré Definidas

Instrutor: Márcio Mendonça

33

Oracle Database 11g

Page 34: Oralcle PL SQL Parte I

Funções de caracter Funções de caracter que retornam valores que retornam valores numéricosnuméricos

Instrutor: Márcio Mendonça

34

Oracle Database 11g

Page 35: Oralcle PL SQL Parte I

ASCII (string)Retorna a representação decimal do primeiro byte de string no conjunto de caracteres do banco de dados.

INSTR (string1,string2 [,a] [,b])Retorna a posição dentro de string 1 onde string2 está contida, com a e b medidos em caracteres.

LENGTH (string)Retorna o comprimento de string medido em caracteres.

INSTR Sintaxe: INSTR (string1, string2 [,a] [,b])Retorna a posição dentro de string1 em que string2 está contida.

Funções Pré DefinidasFunções Pré Definidas

Instrutor: Márcio Mendonça

35

Oracle Database 11g

Page 36: Oralcle PL SQL Parte I

Funções numéricasFunções numéricas

Instrutor: Márcio Mendonça

36

Oracle Database 11g

Page 37: Oralcle PL SQL Parte I

MOD(x,y)Retorna o resto de x dividido por y. Se y for 0, x é retomado.

ROUND(x[,y])Retorna x arredondado para y casas à direita do ponto decimal. Y assume o padrão de 0, o qual arredonda x para o inteiro mais próximo. Se y for negativo, os dígitos à esquerda do ponto decimal são arredondados. Y deve ser um inteiro.

TRUNC (x,[,y])Retorna x truncado (em oposição a arredondado ) para y casas decimais. Y assume o padrão de 0, o que trunca x para um valor de inteiro. Se y for negativo, os dígitos à esquerda do ponto decimal são truncados.

Funções Pré DefinidasFunções Pré Definidas

Instrutor: Márcio Mendonça

37

Oracle Database 11g

Page 38: Oralcle PL SQL Parte I

Funções de DatasFunções de Datas

Instrutor: Márcio Mendonça

38

Oracle Database 11g

Page 39: Oralcle PL SQL Parte I

ADD_MONTHS(d,x)Retorna a data d mais x meses. X pode ser qualquer inteiro. Se o mês resultante tiver menos dias que o mês d, o último dia do mês resultante é retornado. Se não, o resultado tem o mesmo componente de dia que d. O componente de hora de d e o resultado são os mesmos.

LAST_DAYRetorna a data do último dia do mês que contém d.Essa função pode ser utilizada para determinar quantos dias restam no mês atual.

MONTHS_BETWEENRetorna o número de meses entre a data1 ea data2.

SYSDATERetorna a data e a hora atual no tipo DATE.

TRUNC (d,[,formato])Retorna a data d truncado para a unidade especificada por formato.

Funções Pré DefinidasFunções Pré Definidas

Instrutor: Márcio Mendonça

39

Oracle Database 11g

Page 40: Oralcle PL SQL Parte I

O escopo de uma variável é a parte do programa onde a variável pode ser acessada antes de ser liberada da memória.

A visibilidade de uma variável é a parte do programa onde a variável pode ser acessada sem ter de qualificar a referência.

DECLARE x number;

BEGIN........DECLARE

y number;BEGIN

........

........END;..........

END;

Escopo de VariáveisEscopo de Variáveis

Instrutor: Márcio Mendonça

40

Oracle Database 11g

Page 41: Oralcle PL SQL Parte I

OperadoresOperadores

O operador mais básico na PL/SQL é o de atribuição. A atribuição de valores permite mudar o valor de uma variável já definida em uma seção DECLARE.

Sintaxe: nome_da_variável := expressão;

Onde expressão pode ser um outro identificador, um valor, uma expressão usada para chegar a um valor específico, uma linha ou coluna de um outro identificador ou de uma tabela ou cursor, uma variável de host dependendo de como o nome_da_variável foi declarado.

Instrutor: Márcio Mendonça

41

Oracle Database 11g

Page 42: Oralcle PL SQL Parte I

Outros OperadoresOutros Operadores

Instrutor: Márcio Mendonça

42

Oracle Database 11g

Page 43: Oralcle PL SQL Parte I

Expressões BooleanasExpressões Booleanas

Todas as estruturas de controle PL/SQL envolvem expressões booleanas, também conhecidas como condições.

Uma expressão booleana é qualquer expressão que é avaliada como um valor booleano (TRUE, FALSE ou NULL).

Instrutor: Márcio Mendonça

43

Oracle Database 11g

Page 44: Oralcle PL SQL Parte I

Usando PL/SQL com PL/SQL Usando PL/SQL com PL/SQL DeveloperDeveloper

Instrutor: Márcio Mendonça

44

Oracle Database 11g

Page 45: Oralcle PL SQL Parte I

Create table alunos as(codigo number(3), nome varchar2(50), endereco varchar2(150), codigo_profissao varchar2(50));

Create table profissoes as(codigo number(2), descricao varchar2(50));

Criação de TabelasCriação de Tabelas

Instrutor: Márcio Mendonça

45

Oracle Database 11g

Page 46: Oralcle PL SQL Parte I

Insert into profissoes(codigo, descricao) values (1,’Analista de Sistemas’);

Insert into alunos(codigo, nome, endereco, codigo_profissao) values(1,’Maria’,’Av Afonso Pena, 600’,1);

Inserindo RegistrosInserindo Registros

Instrutor: Márcio Mendonça

46

Oracle Database 11g

Page 47: Oralcle PL SQL Parte I

Exemplo de Declaração Exemplo de Declaração

DECLARE v_desc varchar2(50);BEGIN SELECT descricao INTO v_desc FROM profissoes WHERE codigo = 1; END;

Instrutor: Márcio Mendonça

47

Oracle Database 11g

Page 48: Oralcle PL SQL Parte I

Cada comando SQL deve terminar com um ponto e vírgula(;)

Um bloco PL/SQL não é uma unidade de transação. Os comandos COMMIT e ROLLBACK devem ser usados dependendo da necessidade da aplicação.

Comandos DDL não são permitidos.

Comandos SQL em Blocos PL/SQLComandos SQL em Blocos PL/SQL

Instrutor: Márcio Mendonça

48

Oracle Database 11g

Page 49: Oralcle PL SQL Parte I

Comandos SELECT que não retornam apenas uma linha causam uma exeception a ser tratada pelo usuário;

Comandos DML podem processar diversas linhas ao mesmo tempo.

Comandos SQL em Blocos PL/SQLComandos SQL em Blocos PL/SQL

Instrutor: Márcio Mendonça

49

Oracle Database 11g

Page 50: Oralcle PL SQL Parte I

SQL apresenta uma série de comandos que permitem a definição dos dados, chamada de DDL ( Data Definition Language) , composta entre outros pelos comandos Create, que é destinado a criação do Banco de Dados, das tabelas que o compõe, além das relações existentes entre as tabelas. Como exemplo de comandos da classe DDL temos os comandos Create, Alter e Drop.

Os comandos da série DML ( Data Manipulation Language), destinados a consultas, inserções, exclusões e alterações em um ou mais registros de uma ou mais tabelas de maneira simultânea. Com exemplo de comandos da classe DML temos os comandos Select, Insert, Update e Delete.

Um subclasse de comandos DML, a DCL ( Data Control Language), dispõe de comandos de controle como Grant e Revoke.

DDL X DMLDDL X DML

Instrutor: Márcio Mendonça

50

Oracle Database 11g

Page 51: Oralcle PL SQL Parte I

Comandos SQLComandos SQL

Instrutor: Márcio Mendonça

51

Oracle Database 11g

Page 52: Oralcle PL SQL Parte I

Usando Variáveis PL/SQL em SQLUsando Variáveis PL/SQL em SQL

Valores de variáveis e de constantes PL/SQL podem ser passados e usados diretamente por comandos SQL.

Exemplo:

DECLARE Cod number(6) := 3;

BEGINUPDATE clientes SET conceito = 4WHERE codigo = cod;

END;

Instrutor: Márcio Mendonça

52

Oracle Database 11g

Page 53: Oralcle PL SQL Parte I

Controle de TransaçõesControle de Transações

Para o ORACLE uma transação DML vai começar no primeiro comando seguinte a um COMMIT ou ROLLBACK, e vai terminar no próximo COMMIT ou ROLLBACK.

Estas ações podem ocorrer dentro de um bloco PL/SQL, serem controladas manualmente(através da ferramenta utilizada) ou através de um evento do sistema.

Os comandos de controle de transações são pemitidos em um bloco PL/SQL .

Instrutor: Márcio Mendonça

53

Oracle Database 11g

Page 54: Oralcle PL SQL Parte I

Controle de TransaçõesControle de Transações

Exemplo:

BEGINUPDATE Detalhes_do_Pedido SET Desconto = 10 WHERE Quantidade > 1000;IF SQL%ROWCOUNT > 20

THEN ROLLBACK;ELSE COMMIT;

END IF;END;

Instrutor: Márcio Mendonça

54

Oracle Database 11g

Page 55: Oralcle PL SQL Parte I

Usos do Comando SELECT em PL/SQL Usos do Comando SELECT em PL/SQL

A) Atribuir valor a uma variável: Neste caso, deve retornar sempre apenas uma linha de resposta.

Sintaxe:

SELECT coluna_1,..., coluna_n INTO variável_1, ..., variável_nFROM tabela_1,..., tabela_n WHERE condição.

Onde coluna_i é colocada na variável_i. E cada variável já foi declarada.

Instrutor: Márcio Mendonça

55

Oracle Database 11g

Page 56: Oralcle PL SQL Parte I

B) Como subquerie de um outro comando, neste caso sem a cláusula INTO.

Exemplo:

INSERT INTO funcionarios SELECT max(cod_funcionario) + 1, 'fulano', sysdate,777,1000,2000 FROM funcionarios;

Usos do Comando SELECT em PL/SQL Usos do Comando SELECT em PL/SQL

Instrutor: Márcio Mendonça

56

Oracle Database 11g

Page 57: Oralcle PL SQL Parte I

Tratamento de Tratamento de ExcessõesExcessões

Instrutor: Márcio Mendonça

57

Oracle Database 11g

Page 58: Oralcle PL SQL Parte I

Tratamento de ExceçõesTratamento de Exceções

Em PL/SQL, um aviso ou condição de erro é denominado uma exceção.

Exceções podem ser definidas internamente ou pelo usuário.

Uma exceção pré-definida é disparada implicita e automaticamente pelo sistema. Exceções definidas pelo usuário devem ser escritas em rotinas separadas e disparadas explicitamente

Instrutor: Márcio Mendonça

58

Oracle Database 11g

Page 59: Oralcle PL SQL Parte I

Tratamento de ExceçõesTratamento de Exceções

Exemplos de Exceções Pré-definidas:

Instrutor: Márcio Mendonça

59

Oracle Database 11g

Page 60: Oralcle PL SQL Parte I

Tratamento de ErrosTratamento de Erros

Quando um erro ocorre, uma exceção é disparada, a execução normal é interrompida e o controle é passado para a parte de tratamento de exceções do bloco.

Se uma exceção encontrada não tem tratamento então o bloco PL/SQL é terminado com a mensagem: UNHANDLED EXCEPTION.

Instrutor: Márcio Mendonça

60

Oracle Database 11g

Page 61: Oralcle PL SQL Parte I

Tratamento de ErrosTratamento de Erros

Exemplo de declaração de uma Exception:

DECLARE nome EXCEPTION; ...........BEGIN ...........EXCEPTION WHEN no_data_found THEN

........... WHEN two_many_rows THEN

...........END;

Instrutor: Márcio Mendonça

61

Oracle Database 11g

Page 62: Oralcle PL SQL Parte I

Capturando ExceçõesCapturando Exceções

Na seção EXCEPTION pode ser definida uma exceção que capture uma outra exceção que não foi definida, quando esta ocorrer.

Exemplo:DECLARE preco NUMBER(5,2);BEGIN SELECT Preco_Unitario INTO preco FROM Produtos WHERE Cod_Produto = 1; IF preco > 120 THEN UPDATE Produtos

SET Preco_Unitario = 90WHERE Cod_Produto = 1

END IF;END;

Instrutor: Márcio Mendonça

62

Oracle Database 11g

Page 63: Oralcle PL SQL Parte I

Capturando ExceçõesCapturando ExceçõesDECLARE preco NUMBER(5,2);

BEGIN SELECT Preco_Unitario INTO preco FROM Produtos WHERE Cod_Produto = 3; IF preco > 120 THEN UPDATE Produtos SET Preco_Unitario = 90 WHERE Cod_Produto = 3; END IF;EXCEPTION WHEN no_data_found THEN INSERT INTO error_tab VALUES ('Código não cadastrado'); WHEN too_many_rows THEN INSERT INTO error_tab VALUES ('Mais de um produto com código 1'); WHEN others THEN INSERT INTO error_tab VALUES ('Erro ocorrido no bloco');END;

Instrutor: Márcio Mendonça

63

Oracle Database 11g

Page 64: Oralcle PL SQL Parte I

Funções Úteis na Captura de ErrosFunções Úteis na Captura de Erros

Para tratarmos uma exceção, podemos utilizar as funções SQLCODE e SQLERRM, para descobrirmos qual erro ocorreu e conseguir a mensagem associada ao erro.

SQLCODE: Retorna o número da mensagem associada ao erro ocorrido, para exceções internas.

SQLERRM: Retorna a mensagem associada ao erro ocorrido.

Instrutor: Márcio Mendonça

64

Oracle Database 11g