top of page
  • Vanessa Moura

INTRODUÇÃO AO PL/SQL

A linguagem PL/SQL é uma extensão da linguagem SQL com recursos de design de linguagens de programação. As instruções de consulta e a manipulação de dados em SQL estão incluídas nas unidades procedurais de código.


PL/SQL significa “Procedural Language extensions to the Structured Query Language" que em português significa "Extensões da Linguagem Procedural para a Linguagem de Consulta Estruturada”. SQL é uma linguagem popular para consulta e atualização de dados nos sistemas de gerenciamento de banco de dados relacional (RDBMS). > PL/SQL adiciona muitas construções procedurais à linguagem SQL para superar algumas limitações do SQL. Além disso, a PL/SQL fornece uma solução de linguagem de programação mais abrangente para a construção de aplicativos de missão crítica em bancos de dados Oracle.


> PL/SQL é uma linguagem altamente estruturada e legível. Suas construções expressam a intenção do código claramente. Além disso, PL/SQL é uma linguagem simples de aprender.


> PL/SQL é uma linguagem padrão e portátil para desenvolvimento de banco de dados Oracle. Se você desenvolver um programa que é executado em um banco de dados Oracle, poderá movê-lo rapidamente para outro banco de dados Oracle compatível sem nenhuma alteração.


> PL/SQL é uma linguagem embutida. e só pode ser executado em um banco de dados Oracle. Ele não foi projetado para ser usado como uma linguagem autônoma como Java, C # e C ++. Em outras palavras, você não pode desenvolver um programa PL/SQL que seja executado em um sistema que não tenha um banco de dados Oracle.


> PL/SQL é uma linguagem de banco de dados de alto desempenho e altamente integrada. Além de PL/SQL, você pode usar outras linguagens de programação, como Java, C # e C ++. No entanto, é mais fácil escrever código eficiente em PL/SQL do que em outras linguagens de programação quando se trata de interagir com o banco de dados Oracle. Em particular, você pode usar construções específicas de PL/SQL como a instrução FORALL que ajuda a melhorar o desempenho do banco de dados.


O mecanismo PL/SQL é responsável por compilar o código PL/SQL em código de bytes e executar o código executável. O mecanismo PL/SQL só pode ser instalado em um servidor de banco de dados Oracle ou em uma ferramenta de desenvolvimento de aplicativos como por exemplo, o Oracle Forms.

Depois de enviar um bloco PL/SQL ao servidor de banco de dados Oracle, o mecanismo PL/SQL colabora com o mecanismo SQL para compilar e executar o código. O mecanismo PL/SQL executa os elementos procedurais enquanto o mecanismo SQL processa as instruções SQL.

Bloco anônimo PL/SQL

PL/SQL é uma linguagem estruturada em blocos. Um bloco PL/SQL consiste em três seções:

- declaração

- executável

- tratamento de exceções.

Em um bloco, a seção executável é obrigatória, enquanto as seções de declaração e tratamento de exceções são opcionais.


Um bloco PL/SQL tem um nome. Functions ou Procedures são exemplos de um bloco nomeado. Um bloco nomeado é armazenado no servidor de banco de dados Oracle e pode ser reutilizado posteriormente.


Um bloco sem nome é um bloco anônimo e ele não é alocado no servidor de banco de dados Oracle, portanto, é apenas para uso único. No entanto, os blocos anônimos PL/SQL podem ser muito úteis para fins de teste.


A imagem a seguir ilustra a estrutura de um bloco PL/SQL:

Seção de declaração

Um bloco PL/SQL tem uma seção de declaração onde você declara variáveis, aloca memória para cursores e define tipos de dados.


Seção executável

Uma seção executável começa com a palavra-chave BEGIN e termina com a palavra-chave END. A seção executável deve ter pelo menos uma instrução executável, mesmo se for a instrução NULL que não faz nada.


Seção de tratamento de exceções

Um bloco PL/SQL possui uma seção de tratamento de exceções que começa com a palavra-chave EXCEPTION. A seção de tratamento de exceções é onde você captura e trata as exceções levantadas pelo código na seção de execução.


Observe que o próprio bloco é uma instrução executável, portanto, você pode aninhar um bloco dentro de outros blocos.


Exemplos

DECLARE 
    v_message VARCHAR2(255) := 'Hello World!'; 
BEGIN   
    DBMS_OUTPUT.PUT_LINE(v_message); 
END;

Isso te traz o resultado:

Hello World!

O próximo exemplo de bloco anônimo adiciona uma seção de tratamento de exceção que captura a exceção ZERO_DIVIDE gerada na seção executável e exibe uma mensagem de erro.

DECLARE       
    v_result NUMBER;
BEGIN    
    v_result := 1 / 0;    
    EXCEPTION       
        WHEN ZERO_DIVIDE THEN          
            DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;

A mensagem de erro é:

ORA-01476: divisor is equal to zero

Melhoria de desempenho


Problemas com aplicações de baixa performance podem estar freqüentemente relacionados a consultas SQL mal estruturadas ou a um design de banco de dados ineficiente.

A metodologia e tuning da Oracle, tradicionalmente é focada no design da aplicação e no tuning de consultas SQL antes mesmo de analisar quaisquer tipos de problemas relacionados à configuração do banco de dados.

A otimização de uma consulta constitui em determinar a melhor estratégia para executá-la no banco de dados. O otimizador do Oracle escolhe, por exemplo, se usará um índice ou não para uma consulta especifica e que técnicas de JOIN usar na junção de múltiplas tabelas.


Estas decisões têm um impacto muito grande na performance de um SQL e por isso a otimização de uma consulta é essencial para qualquer aplicação e de extrema importância para a performance de um banco de dados relacional. E faz parte da lista de tasks e habilidades de um DBA.

É muito importante que os desenvolvedores conheçam o otimizador do Oracle como também os conceitos relativos à tuning. Tal conhecimento irá ajudar a escrever consultas muito mais eficientes e rápidas.


Caracteres Especiais


Assim como palavras reservadas, a linguagem também tem carácteres reservadas e especiais.


Símbolo Caracteres

; Ponto e vírgula: fim de comando

% Percentagem: indicador de atributo

: Dois pontos: indicador de variável host

** Asterisco duplo: operador exponencial

<> e != Operador diferente

|| Operador de concatenação

<< e >> Delimitador de rótulo (label)

:= Operador de atribuição

=> Operador de associação para notação posicional

-- Indicador de comentário

/* e */ Início e final de um bloco de comentário


Tipos de Dados


Tanto variáveis, quanto constantes devem ter um tipo de dado válido que possa especificar o seu formato de armazenagem, restrições e qual o intervalo de valores é permitido. Abaixo algumas categorias de tipos de dados:




Definição dos tipos de dados escalares


A linguagem PL/SQL também provê subtipos de dados, como é o caso do tipo de dados NUMBER que possui um subtipo de dado do tipo INTEGER. Normalmente podemos utilizar subtipos de dados quando estamos trabalhando com outras linguagens de programação, como é o caso do Java, por exemplo.


Abaixo um trecho de código, apresentando alguns dos tipos de dados na lista acima.

SET serveroutput ON;
  DECLARE
    IdFuncionario BINARY_INTEGER;
    Salario NUMBER(10, 2);
    Acrescimo FLOAT;
  BEGIN
    IdFuncionario := 25;
    Salario       := 4500;
    Acrescimo     := 0.25;
    dbms_output.put_line(O novo salário do funcionário:|| nSalario*(1 + Acrescimo));
  END;

Definição dos tipos de dados Caracteres



Exemplo utilizando tipos acima:

SET serveroutput ON;
  DECLARE
    Idade NUMBER;
    Nome VARCHAR2(100);
    Estado CHAR(2);
  BEGIN
    Idade := 25;
    Nome       := ‘Vanessa Moura’;
    Estado     :=SP;
    dbms_output.put_line(‘Uma das colaboradoras deste site é:|| Nome || ‘ e é natural do estado de  ’ || Estado);
   END;

Já os tipos de dados boolean armazenam apenas valores lógicos que são utilizados em operações lógicas. Estes valores lógicos podem ser de três tipos em PL/SQL, sendo estes True, False ou mesmo, o valor Null.

No entanto, a SQL não tem tipos de dados equivalentes ao boolean, portanto, os valores booleanos não podem ser usados em determinadas situações que são:

  • Instruções SQL.

  • Funções SQL embutidas, como por exemplo, utilizando o to_char().

  • Funções PL/SQL sendo chamadas por instruções SQL.

SET serveroutput ON;
  DECLARE
    IdFuncionario BINARY_INTEGER;
    Salario  NUMBER(10, 2);
    TipoReal BOOLEAN;
  BEGIN
    idfuncionario := 25;
    Salario       := 1500;
    TipoReal      := TRUE;
  IF TipoReal THEN
      dbms_output.put_line('O salário do funcionário '|| Idfuncionario || ' é em Reais R');
      


Definição dos tipos de dados Datetime


Existem duas classes de tipos de dados relacionados a data e hora no PL/SQL

  • DATETIME

  • INTERVAL


Os tipos de dados DATETIME são:

  • DATE

  • TIMESTAMP

  • TIMESTAMP WITH TIME ZONE

  • TIMESTAMP WITH LOCAL TIME ZONE

Os tipos de dados INTERVAL são:

  • INTERVAL YEAR TO MONTH

  • INTERVAL DAY TO SECOND



Abaixo um exemplo usando alguns destes data typesÇ

SET serveroutput ON;
  DECLARE
    IdFuncionario binary_integer;
    Salario      NUMBER(10, 2);
    TipoReal     BOOLEAN;
    Admissao     DATE;
  BEGIN
    idfuncionario := 25;
    Salario       := 1500;
    TipoReal      := TRUE;
    Admissao      := '19/12/2013';
  IF TipoReal THEN
      dbms_output.put_line('O salário do funcionário '|| funcionario || ' é em Reais (...)

Tipos de dados como LOB (Large Objects) são tipos de dados que fogem dos padrões explicados anteriormente, sendo estes postos em uma nova categoria de informações, assim como text, imagens gráficas, vídeos e arquivos de áudio. O tipo de dados LOB permite de forma eficiente o acesso a estas informações de forma aleatória, o que não ocorre com os outros tipos de dados já explanados.





Subtipos definidos pelo usuário


Um subtipo é um tipo de dados que é um subconjunto de outro tipo de dados. Um subtipo tem as mesmas operações válidas que seu tipo base. Um tipo de dados e seus subtipos compreendem uma família de tipos de dados.


O PL/SQL predefine muitos tipos e subtipos no pacote STANDARD e permite que você defina seus próprios subtipos.

DECLARE
  SUBTYPE nome_complero IS VARCHAR2(60);
  SUBTYPE mensagem IS VARCHAR2(100);
  msg mensagem;
  saudacao nome_completo;
  BEGIN
  saudacao := ‘Vanessa Moura’;
  msg := ‘Seja bem vindo!;
  dbms_output.put_line(saudacao || ‘ ‘ || msg);
  END;
  /

Valores NULL no PL/SQL

Em PL/SQL, valores null são como valores perdidos ou dados desconhecidos, que não são valores inteiros ou de nenhum outro tipo de dado especifico. Entendam que quando um valor é null, não estamos dizendo que isso implique que ele é um valor vazio ou 0. Null quer dizer realmente que não existe valor definido para determinado campo. Mais para frente iremos aprender como usar as condições IS NULL e IS NOT NULL para testes.


DECLARANDO VARIÁVEIS


As variáveis PL/SQL devem ser declaradas na seção de declaração ou em um package como uma variável global. Quando você declara uma variável, o PL/SQL aloca memória para o valor da variável e o local de armazenamento é identificado pelo nome dessa variável.


A sintaxe para declarar uma variável é:

Identificador [CONSTANT] tipo de dados [NOT NULL]
[:= | DEFAULT expr] ;

Exemplos:


DECLARE
 v_hiredate    DATE;
 v_deptno      NUMBER(2) NOT NULL := 10;
 v_location    VARCHAR( ) :=Atlanta;
 c_com         CONSTANT NUMBER := 1400;


Declarando variáveis escalares

Exemplos:

 v_job         VARCHAR2(9);
 v_coult       BINARY_INTEGER := 0;
 v_total_sal   NUMBER(9,2) := 0;
 v_orderdate   DATE := SYSDATE + 7;
 c_tax_rate    CONSTANT NUMBER(2,3) := 8.25;
 v_valid       BOOLEAN NOT NULL := TRUE;

 

Ufa! Cobrimos bastante coisa neste post, né? Mas isto foi apenas uma visão geral! Teremos posts dedicados a tudo o que foi abordado neste post, assim vamos dissecar cada comando e tipo de dado juntos!

Espero que você esteja gostando e claro, se está sendo útil, não se esqueça de compartilhar em suas redes sociais para que mais pessoas possam aprender também!


Para ver o próximo post, clique aqui.

980 views0 comments

Recent Posts

See All
bottom of page