Introdução ao PL/SQL: Recursos e Estruturas
Introdução ao PL/SQL: Recursos e Estruturas
A linguagem de programação PL/SQL foi desenvolvida pela Oracle Corporation no final dos anos 1980 como procedural
extensão de linguagem para SQL e o banco de dados relacional Oracle. A seguir estão fatos notáveis sobre
PL/SQL:
PL/SQL também pode ser chamado diretamente da interface de linha de comando SQL*Plus.
Chamadas diretas também podem ser feitas de chamadas de linguagens de programação externas para o banco de dados.
Além da Oracle, o PL/SQL está disponível no banco de dados em memória TimesTen e no IBM DB2.
Features of PL/SQL
SQL é a linguagem padrão de banco de dados e PL/SQL está fortemente integrada ao SQL. PL/SQL
suporta tanto SQL estático quanto dinâmico. SQL estático suporta operações DML e transações
controle a partir do bloco PL/SQL. SQL dinâmico é SQL que permite embutir instruções DDL no PL/SQL.
blocos.
PL/SQL permite enviar um bloco inteiro de instruções ao banco de dados de uma só vez. Isso reduz
tráfego de rede e oferece alto desempenho para as aplicações.
O PL/SQL proporciona alta produtividade aos programadores, pois pode consultar, transformar e atualizar dados em um
banco de dados.
O PL/SQL economiza tempo no design e na depuração com recursos robustos, como tratamento de exceções,
encapsulamento, ocultação de dados e tipos de dados orientados a objetos.
PL/SQL é uma linguagem estruturada em blocos, o que significa que os programas PL/SQL são divididos e escritos em blocos lógicos de
código. Cada bloco consiste em três sub-partes:
Declarations
1 Esta seção começa com a palavra-chave DECLARE. É uma seção opcional e define todas as variáveis,
cursos, subprogramas e outros elementos a serem usados no programa.
Comandos Executáveis
Esta seção está encapsulada entre as palavras-chave BEGIN e END e é uma seção obrigatória. Ela
2 consiste nas instruções PL/SQL executáveis do programa. Deve ter pelo menos uma
linha de código executável, que pode ser apenas um comando NULL para indicar que nada deve ser
executado.
Tratamento de Exceções
3 Esta seção começa com a palavra-chave EXCEÇÃO. Esta seção é novamente opcional e contém
exceção(ões) que tratam erros no programa.
Cada instrução PL/SQL termina com um ponto e vírgula (;). Blocos PL/SQL podem ser aninhados dentro de outros blocos PL/SQL.
usando BEGIN e END. Aqui está a estrutura básica de um bloco PL/SQL:
DECLARAÇÃO
<seção de declarações>
COMEÇAR
<executable command(s)>
EXCEÇÃO
<exception handling>
FIM;
Os Delimitadores PL/SQL
Um delimitador é um símbolo com um significado especial. A seguir está a lista de delimitadores em PL/SQL:
Delimitador Description
% Indicador de atributo
, Separador de itens
= Operador relacional
; Terminador de declaração
:= Operador de atribuição
|| Operador de concatenação
** Operador de exponenciação
.. Operador de intervalo
O PL/SQL suporta comentários de uma linha e comentários de várias linhas. Todos os caracteres disponíveis dentro de qualquer comentário são ignorados.
pelo compilador PL/SQL. Os comentários de linha única do PL/SQL começam com o delimitador -- (duas barras) e multi-linhas
os comentários estão envolvidos por /* e */.
DECLARAR
-- declaração de variável
message varchar2(20):='Hello, World!';
COMEÇO
/*
* Instrução(ões) executável(eis) PL/SQL
*/
dbms_output.put_line(mensagem);
FIM;
PL/SQL fornece subtótipos de tipos de dados. Por exemplo, o tipo de dado NUMBER tem um subtipo chamado INTEGER.
pode usar subtipos no seu programa PL/SQL para tornar os tipos de dados compatíveis com os tipos de dados em outros programas enquanto
embedding PL/SQL code in another program, such as a Java program.
Número de ponto fixo ou ponto flutuante com valor absoluto na faixa de 1E-130 a
NÚMERO(prec, escala)
(mas não incluindo) 1.0E126. Uma variável do TIPO NÚMERO também pode representar 0.
DEC(prec, escala) Tipo de ponto fixo específico do ANSI com precisão máxima de 38 dígitos decimais.
DECIMAL(prec, scale) tipo de ponto fixo específico da IBM com precisão máxima de 38 dígitos decimais.
ANSI specific floating-point type with maximum precision of 126 binary digits
PRECISÃO DUPLA
(aproximadamente 38 dígitos decimais)
Tipo de ponto flutuante específico da ANSI e IBM com precisão máxima de 126
FLOAT
dígitos binários (aproximadamente 38 dígitos decimais)
INTEIRO Tipo inteiro específico da ANSI com precisão máxima de 38 dígitos decimais
Tipo de inteiro específico da ANSI e IBM com precisão máxima de 38 casas decimais
INTEIRO
dígitos
CARÁCTER String de caracteres de comprimento fixo com tamanho máximo de 32.767 bytes
VARCHAR2 String de caracteres de comprimento variável com tamanho máximo de 32.767 bytes
String binário ou de bytes de comprimento variável com tamanho máximo de 32.767 bytes, não
CRU
interpretado por PL/SQL
NCHAR Fixed-length national character string with maximum size of 32,767 bytes
NVARCHAR2 String de caracteres nacional de comprimento variável com tamanho máximo de 32.767 bytes
LONGO String de caracteres de comprimento variável com tamanho máximo de 32.760 bytes
Cadeia binária ou de bytes de comprimento variável com tamanho máximo de 32.760 bytes, não
LONGO CRU
interpretado por PL/SQL
ROWID Identificador de linha físico, o endereço de uma linha em uma tabela comum
No entanto, o SQL não possui um tipo de dado equivalente a BOOLEAN. Portanto, valores Booleanos não podem ser usados em:
instruções SQL
O formato de data padrão é definido pelo parâmetro de inicialização da Oracle NLS_DATE_FORMAT. Por exemplo, o padrão
pode ser 'DD-MON-YY', que inclui um número de dois dígitos para o dia do mês, uma abreviação do mês
nome, e os últimos dois dígitos do ano, por exemplo, 01-OUT-12.
Each DATE includes the century, year, month, day, hour, minute, and second. The following table shows the valid
valores para cada campo:
-4712 a 9999
YEAR Qualquer inteiro não nulo
(excluindo o ano 0)
MONTH 01 a 12 0 a 11
01 a 31 (limitado pelo
valores de MÊS e
DIA YEAR, according to the Any nonzero integer
regras do calendário
for the locale)
HORA 00 a 23 0 a 23
MINUTE 00 a 59 0 a 59
00 a 59,9(n), onde
0 a 59,9(n), onde 9(n) é a precisão do intervalo
SEGUNDO 9(n) é a precisão de
segundos fracionários
segundos fracionários de tempo
-12 a 14 (faixa
TIMEZONE_HOUR acomoda a luz do dia Não aplicável
mudanças de horário de verão
Encontrado no dinâmico
visualização de desempenho da REGIÃO_DE_FUSO_HORÁRIO
Não aplicável
NOME_DA_FUSO_HORÁRIO
Encontrado na dinâmica
TIMEZONE_ABBR visualização de desempenho
Não aplicável
V$NOMES_DE_FUSO_HORÁRIO
NULLs em PL/SQL
Os valores NULL em PL/SQL representam dados ausentes ou desconhecidos e não são um inteiro, um caractere ou qualquer outro.
tipo de dado específico. Observe que NULL não é o mesmo que uma string de dados vazia ou o valor de caractere nulo '\0'. Um nulo pode
ser atribuído, mas não pode ser igualado a nada, incluindo a si mesmo.
DECLARAR
message varchar2(20):='Hello, World!';
INÍCIO
dbms_output.put_line(mensagem);
FIM;
/
OU
Dbms_output.put_line('olá mundo');
Sintaxe :
Declarar
Um número(2);
B número(2);
C número(2);
Começar
A := 10;
B:= 20;
C := A + B;
Fim;
Declara
Um número(2);
B número(2);
C número(2);
Começar
A := &A;
B:= &B;
C := A + B;
Fim;
WAP code to calculate total amount (TA+DA) of an employee (EID= 20) , Also update the amount in the table .
Declarar
um número(10);
número b (10);
c número(10);
Começar
Selecione TA, DA em a,b de Emp onde EID = 20;
C := a+b;
Atualizar Emp defina total = c onde EID = 20;
Fim;
%TIPO
PARA adquirir o mesmo tipo de dado para uma variável declarada como aquele que estava no banco de dados.
Sintaxe :
V_nome NOME_DA_TABELA.NOME_DA_COLUNA%TIPO
Exemplo :
Declarar
A [Link]%tipo;
ESTATEMENTOS CONDICIONAIS
SE–ENTÃO
SE–ENTÃO–SENÃO
SE–ENTÃO–SE NÃO
Declarar
Um número (2);
B número(2);
Begin
A := &A;
B := &B;
Se A > B ENTÃO
DBMS_OUTPUT.PUT_LINE('A É MAIOR');
OUTRO
DBMS_OUTPUT.PUT_LINE('B É MAIOR');
FIM SE;
FIM;
Declarar
Um número (2);
Começar
A = &A;
Se A mod 2 = 0 então
Dbms_output.put_line('par');
Outra coisa
Dbms_output.put_line('ímpar');
Fim se;
Fim;
LAÇAMENTO
LAÇO
LAÇO ENQUANTO
LOOP FOR
Declarar
i número(2);
começar
i := 1;
LAÇO
Dbms_output.put_line(i);
i:=i+1;
Saia quando i > 10;
FIM DO LOOP;
FIM;
Laço FOR
Declarar
Um número (4);
eu número(4);
começar
para i em 1..10
laço
A:=2*i;
Dbms_output.put_line(' 2 * ' || i || ' = ' || A );
Fim do loop;
Fim;
Para reverter
DECLARAR
um número(2) := 10;
COMEÇAR
a := a + 1;
FIM DO LOOP;
FIM;