Download - Oralcle PL SQL Parte I
![Page 1: Oralcle PL SQL Parte I](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/1.jpg)
PL/SQL- PL/SQL- FundamentosFundamentos
Instrutor: Márcio Mendonça
1
Oracle Database 11g1
![Page 2: Oralcle PL SQL Parte I](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/2.jpg)
É 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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/16.jpg)
Variáveis Variáveis
Instrutor: Márcio Mendonça
16
Oracle Database 11g
![Page 17: Oralcle PL SQL Parte I](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/23.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/24.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/25.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/26.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/27.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/28.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/29.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/30.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/31.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/32.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/33.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/34.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/35.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/36.jpg)
Funções numéricasFunções numéricas
Instrutor: Márcio Mendonça
36
Oracle Database 11g
![Page 37: Oralcle PL SQL Parte I](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/37.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/38.jpg)
Funções de DatasFunções de Datas
Instrutor: Márcio Mendonça
38
Oracle Database 11g
![Page 39: Oralcle PL SQL Parte I](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/39.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/40.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/41.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/42.jpg)
Outros OperadoresOutros Operadores
Instrutor: Márcio Mendonça
42
Oracle Database 11g
![Page 43: Oralcle PL SQL Parte I](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/43.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/44.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/45.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/46.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/47.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/48.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/49.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/50.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/51.jpg)
Comandos SQLComandos SQL
Instrutor: Márcio Mendonça
51
Oracle Database 11g
![Page 52: Oralcle PL SQL Parte I](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/52.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/53.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/54.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/55.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/56.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/57.jpg)
Tratamento de Tratamento de ExcessõesExcessões
Instrutor: Márcio Mendonça
57
Oracle Database 11g
![Page 58: Oralcle PL SQL Parte I](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/58.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/59.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/60.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/61.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/62.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/63.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081420/5695d32e1a28ab9b029d13ed/html5/thumbnails/64.jpg)
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