Database
 sql >> Base de Dados >  >> RDS >> Database

Tutorial de PL/SQL:Tudo o que você precisa saber sobre PL/SQL

PL/SQL é uma linguagem procedural que supera as deficiências enfrentadas pela Linguagem de Consulta Estruturada. É uma extensão do SQL e podemos até mesmo usar consultas SQL sem problemas em qualquer aplicativo ou programa PL/SQL. Neste tutorial de PL/SQL, abordaremos os conceitos básicos de PL/SQL em detalhes. Os tópicos a seguir são abordados neste artigo.

  • O que é PL/SQL?
    • Recursos
    • PL/SQL vs SQL
  • Estruturas de bloco em PL/SQL
  • Variáveis ​​PL/SQL
  • Função em PL/SQL
  • Procedimento PL/SQL
  • Bloco aninhado
  • Declaração SE
  • Declaração CASE
  • Instrução de loop
    • Instrução While Loop
    • Para declaração de loop
  • Manuseio excepcional

O que é PL/SQL?

Significa a extensão da linguagem procedural para a linguagem de consulta estruturada. A Oracle criou o PL/SQL que estende algumas limitações do SQL para fornecer uma solução mais abrangente para a criação de aplicativos de missão crítica executados no banco de dados Oracle.

Recursos

  • PL/SQL fornece a funcionalidade de uma linguagem procedural, como tomada de decisão, iteração, etc.

  • Usando um único comando, o PL/SQL pode executar várias consultas.

  • Também podemos reutilizar unidades PL/SQL como funções, triggers, procedimentos, etc que são armazenados no banco de dados após a criação.

  • PL/SQL também tem um bloco de tratamento de exceções que trata as exceções em PL/SQL.

  • Extensa verificação de erros também é possível usando PL/SQL

  • As aplicações escritas em PL/SQL são portáveis ​​para outros hardwares e sistemas operacionais, desde que o oracle esteja operacional.

PL/SQL vs SQL

SQL PL/SQL
SQL é uma consulta única usada para realizar operações DDL e DML PL/SQL é um bloco de códigos que é usado para definir um programa inteiro ou procedimento/função, etc
Não define realmente como as coisas precisam ser feitas, mas define o que precisa ser feito PL/SQL define como as coisas precisam ser feitas
Executa uma única instrução Executa um bloco de instruções de uma só vez.
SQL é usado principalmente para manipular os dados PL/SQL, por outro lado, é usado para criar aplicativos
Não pode conter código PL/SQL Como é uma extensão SQL, pode conter código SQL nela


Estruturas de bloco em PL/SQL

O PL/SQL normalmente organiza o código em blocos. O bloco de código sem nome é conhecido como bloco anônimo. É conhecido como bloco anônimo porque não é salvo no banco de dados oracle. Vamos dar uma olhada em um bloco anônimo em PL/SQL.

[DECLARE]
   declaration statements;
[BEGIN]
   execution statements;
   [EXCEPTION]
      exception statements;
END;
/

Observando o diagrama mostrado acima, podemos ver que a estrutura do bloco é dividida em quatro partes, ou seja, declaração, início, exceção e fim. Vamos tentar entender como funciona a estrutura de blocos em PL/SQL. De todas essas seções, a seção de execução é obrigatória e as demais são opcionais.

  • DECLARAR palavra-chave é usada para a seção de declaração é usada para declarar tipos de dados e estruturas como variáveis, funções, etc.

  • INICIAR palavra-chave é usada para a seção de execução. É obrigatório e contém todas as instruções que precisam ser executadas. Este bloco é onde a lógica de negócios é definida, podemos usar instruções processuais ou SQL neste bloco.

  • A EXCEÇÃO palavra-chave é usada para a seção de exceção. Ele contém todas as instruções de exceção.

  • END A palavra-chave marca o final do bloco e a barra invertida '/' informa a ferramenta que você está usando (Oracle Database Tool) para executar o bloco PL/SQL.


Aqui está um exemplo simples para mostrar como podemos usar o código PL/SQL.
BEGIN
       NULL;
END;
/

Agora que sabemos como a estrutura de blocos funciona em PL/SQL, vamos entender os vários aspectos de PL/SQL como declarar, nomear e atribuir valores às variáveis.

Variáveis ​​PL/SQL

A variável em PL/SQL é basicamente um nome que varia ou um local de armazenamento temporário que suporta um determinado tipo de dado. Vamos dar uma olhada em como podemos usar as variáveis ​​em um programa PL/SQL.

Regras de nomenclatura de variáveis

PL/SQL segue as seguintes regras para nomear variáveis.

  • A variável não pode ter mais de 31 caracteres

  • O nome da variável deve começar com um caractere ASCII. Como a PL/SQL faz distinção entre maiúsculas e minúsculas, uma letra maiúscula e uma letra minúscula serão variáveis ​​diferentes.

  • Após o primeiro caractere, deve haver um caractere especial ($,_ ) ou qualquer número.

Convenções de nomenclatura


Use as seguintes convenções de nomenclatura listadas abaixo para usar as variáveis.
Prefixo Tipo de dados
v_ VARCHAR2
n_ NUMERO
t_ TABELA
r_ LINHA
d_ DATA
b_ BOOLEAN

Declaração


Vamos tentar entender como é feita a declaração de variáveis ​​em PL/SQL

A declaração inclui o nome da variável seguido pelo tipo de dados e separado por um ponto e vírgula. A seguir está um exemplo para mostrar como você pode declarar uma variável em PL/SQL.
DECLARE
   v_name VARCHAR(25);
   n_age NUMBER(3);
BEGIN
  NULL;
END;

Você também pode adicionar o comprimento do tipo de dados como fizemos no exemplo acima.

Âncoras


A âncora basicamente se refere ao uso da palavra-chave %TYPE para declarar uma variável com o tipo de dado associado ao tipo de dado de uma coluna de uma determinada coluna em uma tabela.

Dê uma olhada em um exemplo para entender isso. Suponha que tenhamos uma tabela EMPLOYEES, podemos usar as âncoras da seguinte maneira.
DECLARE
    v_name EMPLOYEE.NAME%TYPE;
    n_age    EMPLOYEE.AGE%TYPE;
BEGIN
   NULL;
END;
/

Tarefa

A atribuição de variáveis ​​é bastante fácil, podemos usar o operador de atribuição para atribuir valores a uma variável. O exemplo a seguir mostra como podemos atribuir valores a uma variável.

DECLARE
   v_name VARCHAR(20);
   n_course VARCHAR(10);
BEGIN
  v_name = "edureka";
  v_course = "sql";
END;
/

Inicialização


Também podemos inicializar um valor para a variável na seção de declaração. O exemplo a seguir mostra como podemos inicializar valores para uma variável.
DECLARE
v_name VARCHAR(20) = "edureka";
n_course VARCHAR(10) = "sql";
BEGIN
 NULL;
END;
/

Agora que sabemos como podemos trabalhar com as variáveis, vamos tentar entender como vamos usar funções em PL/SQL.

Função em PL/SQL

Uma função em PL/SQL é basicamente um bloco nomeado que retorna um valor. Também é conhecido como subrotina ou subprograma, a sintaxe a seguir mostra como podemos usar funções em PL/SQL.

CREATE [OR REPLACE] FUNCTION function_name [(
   parameter_1 [IN] [OUT] data_type,
   parameter_2 [IN] [OUT] data_type,
   parameter_N [IN] [OUT] data_type]
    RETURN return_data_type IS
 
BEGIN
   statements
   return return_data_type;
   EXCEPTION
     
END;
/

Em primeiro lugar, você deve especificar um nome de função após a palavra-chave. O nome da função deve começar com um verbo. Uma função pode ter nenhum, um ou mais parâmetros que especificamos em parâmetros. Temos que especificar o tipo de dados de cada parâmetro explicitamente e, em seguida, vem o modo que pode ser um dos seguintes.

  • IN – O parâmetro IN é um parâmetro somente leitura.

  • OUT – É um parâmetro somente de gravação

  • IN OUT – O parâmetro IN OUT é um parâmetro de leitura e gravação.


Aqui está um exemplo simples para mostrar como usamos funções em PL/SQL.
CREATE OR REPLACE FUNCTION try_parse(
    iv_number IN VARCHAR2)
  RETURN NUMBER IS
BEGIN
   RETURN to_number(iv_number);
   EXCEPTION
     WHEN others THEN
        RETURN NULL;
END;

Chamando uma função

Vamos tentar chamar a função que criamos em um bloco anônimo no exemplo a seguir.
SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
  n_x number;
  n_y number;
   n_z number;
BEGIN
   n_x := try_parse('256');
   n_y := try_parse('29.72');
   n_z := try_parse('pqrs');
 
   DBMS_OUTPUT.PUT_LINE(n_x);
   DBMS_OUTPUT.PUT_LINE(n_y);
   DBMS_OUTPUT.PUT_LINE(n_z);
END;
/

Podemos chamar a função em uma instrução SELECT também. Agora que sabemos como podemos usar funções em PL/SQL, vamos tentar entender como trabalhamos com procedimentos em PL/SQL.

Procedimento PL/SQL

Um procedimento é basicamente um bloco que realiza uma tarefa específica. Usando um procedimento, podemos encapsular ou encapsular lógica de negócios complexa e reutilizá-la na camada de aplicativo e de banco de dados.

Vamos dar uma olhada em um exemplo simples para entender como o procedimento funciona em PL/SQL

CREATE OR REPLACE PROCEDURE adjust_salary(
    in_employee_id IN EMPLOYEES.EMPLOYEE_ID%TYPE,
    in_percent IN NUMBER
) IS
BEGIN
   -- update employee's salary
   UPDATE employees
   SET salary = salary + salary * in_percent / 100
   WHERE employee_id = in_employee_id;
END;

No exemplo acima, temos dois parâmetros, o procedimento ajusta o salário por uma determinada porcentagem e a palavra-chave UPDATE atualiza o valor nas informações do salário.

Cabeçalho do procedimento

A seção antes da palavra-chave IS é chamada de cabeçalho do procedimento. A seguir estão algumas dicas com as quais você deve estar familiarizado ao trabalhar com procedimentos.

  • esquema – É o nome opcional do esquema ao qual o procedimento pertence.

  • nome – O nome do procedimento que deve começar com um verbo.

  • parâmetros – É a lista opcional de parâmetros.

  • AUTHID – Ele determina se o procedimento será executado com o privilégio do usuário atual ou do proprietário original do procedimento.


Corpo do procedimento

Tudo o que vem depois da palavra-chave IS é chamado de corpo do procedimento. Temos as instruções de declaração, exceção e execução no corpo do procedimento. Ao contrário da função, a palavra-chave RETURN em um procedimento é usada para interromper a execução e retornar o controle ao chamador.

Chamando um procedimento

Vamos ver como podemos chamar um procedimento em PL/SQL.

	
EXEC procedure_name(param1,param2…paramN);

Podemos chamar os procedimentos sem parâmetros usando apenas a palavra-chave EXEC e o nome do procedimento. Agora que sabemos como podemos trabalhar com procedimentos, vamos tentar entender como os blocos aninhados são usados ​​em PL/SQL.

Bloco aninhado

Um bloco aninhado nada mais é do que uma combinação de um ou mais blocos PL/SQL para obter melhor controle sobre a execução e manuseio excepcional do programa.

Aqui está um exemplo simples de um bloco aninhado.

SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
  n_emp_id EMPLOYEES.EMPLOYEE_ID%TYPE := &emp_id1;
BEGIN
  DECLARE
    n_emp_id employees.employee_id%TYPE := &emp_id2;
    v_name   employees.first_name%TYPE;
  BEGIN
    SELECT first_name
    INTO v_name
    FROM employees
    WHERE employee_id = n_emp_id;
 
    DBMS_OUTPUT.PUT_LINE('First name of employee ' || n_emp_id || 
                                       ' is ' || v_name);
    EXCEPTION
      WHEN no_data_found THEN
        DBMS_OUTPUT.PUT_LINE('Employee ' || n_emp_id || ' not found');
  END;
END;
/

O bloco PL/SQL externo no exemplo acima é conhecido como bloco pai ou bloco envolvente, o bloco interno, por outro lado, é conhecido como bloco filho ou bloco bloco fechado.

Não é uma boa idéia usar as variáveis ​​com os mesmos nomes em ambos os blocos porque durante a execução a variável do bloco filho substituirá a variável do bloco pai. Isso acontece porque o PL/SQL dá prioridade à variável dentro de seu próprio bloco.

Bloquear marcador

Podemos superar esse problema com o rótulo do bloco que nos ajuda a fazer referências às variáveis ​​dentro dos blocos usando um rótulo.

Aqui está um exemplo simples para mostrar como podemos usar um rótulo de bloco.

<<block_label>>
DECLARE
...
BEGIN
...
END;

Usar um rótulo de bloco ajuda a melhorar a legibilidade do código, obter melhor controle e fazer referências aos blocos. Agora que sabemos como podemos trabalhar com blocos aninhados, vamos tentar entender como a IF STATEMENT funciona em PL/SQL.

Declaração IF

PL/SQL tem três INSTRUÇÕES IF

  • SE-ENTÃO – É o mais simples IF STATEMENT se a condição for verdadeira as instruções serão executadas, se a condição for falsa, não faz nada.

  • IF-THEN-ELSE – Neste, a cláusula ELSE é adicionada para uma sequência alternativa de instruções.

  • SE-ENTÃO-ELSEIF – Ele nos permite executar várias condições de teste em uma sequência.


Sintaxe SE-ENTÃO


IF condition THEN
   sequence_of_statements;
END IF;

Sintaxe SE-THEN-ELSE


IF condition THEN
   sequence_of_if_statements;
ELSE
   sequence_of_else_statements;
END IF;

Sintaxe SE-THEN-ELSEIF


IF condition1  THEN
   sequence_of_statements1
ELSIF condition2 THEN
   sequence_of_statements2
ELSE
   sequence_of_statements3
END IF;

Agora que terminamos com a IF STATEMENT, vejamos a instrução CASE em PL/SQL.

Declaração CASE

A instrução CASE basicamente ajuda na execução de uma sequência de instruções com base em um seletor. Um seletor, neste caso, pode ser qualquer coisa, pode ser uma variável, uma função ou uma simples expressão. Aqui está um exemplo simples para mostrar a sintaxe da instrução CASE em PL/SQL.

[<<label_name>>]
CASE [TRUE | selector]
   WHEN expression1 THEN
 sequence_of_statements1;
   WHEN expression2 THEN
 sequence_of_statements2;
   ...
   WHEN expressionN THEN
 sequence_of_statementsN;
  [ELSE sequence_of_statementsN+1;]
END CASE [label_name];

Na sintaxe acima, após a palavra-chave CASE vem o seletor. A PL/SQL avaliará o seletor apenas uma vez para determinar qual instrução precisa ser executada.

Seguido pelo seletor está a palavra-chave WHEN. Se a expressão satisfizer o seletor, a instrução correspondente após a palavra-chave THEN será executada.

Agora que sabemos como podemos usar uma instrução CASE, vamos tentar entender como usaremos as instruções de loop na PL/SQL.

Declaração de loop

Uma instrução de loop em PL/SQL é uma instrução iterativa que permite executar uma sequência de instruções várias vezes. Aqui está um exemplo simples para mostrar a sintaxe de uma instrução de loop em PL/SQL.

LOOP
   sequence_of_statements;
END LOOP;

Deve haver pelo menos uma instrução executável entre as palavras-chave LOOP e END LOOP.

Loop com instrução EXIT

As instruções EXIT e EXIT quando permitem que você saia do loop. A instrução EXIT WHEN encerra o loop condicionalmente enquanto EXIT encerra a execução incondicionalmente.

LOOP
   ...
   EXIT WHEN condition;
END LOOP;

Rótulo de loop

Um rótulo de loop é usado para qualificar o nome da variável do contador de loop quando usado em um loop aninhado. A seguir está a sintaxe de um rótulo de loop.

<<label>>
LOOP
   sequence_of_statements;
END LOOP label;

Agora que sabemos como podemos usar as instruções de loop, vamos dar uma olhada nas instruções de loop while para melhor compreensão.

Declaração de loop durante

Podemos usar a instrução de loop WHILE quando o número de execuções não for definido até que a execução comece. A sintaxe a seguir é usada para uma instrução de loop WHILE em PL/SQL.

WHILE condition
LOOP
   sequence_of_statements;
END LOOP;

A condição na sintaxe é um valor ou expressão booleana que é avaliada como TRUE, FALSE ou NULL. Se a condição for TRUE, os comandos serão executados, se for FALSE, a execução para e o controle passa para o próximo comando executável.

Agora que sabemos como podemos usar uma instrução de loop WHILE, vamos dar uma olhada na instrução de loop FOR.

For Loop Statement

Uma instrução de loop FOR em PL/SQL nos permite executar uma sequência de instruções por um número definido de vezes. A seguir está a sintaxe para usar a instrução de loop FOR em PL/SQL

FOR loop_counter IN [REVERSE] lower_bound .. higher_bound
LOOP
   sequence_of_statements;
END LOOP;

PL/SQL cria uma variável local loop_counter automaticamente com um tipo de dados INTEGER para o loop para que você não precise declará-lo explicitamente. O limite inferior.. limite superior é o intervalo sobre o qual o loop itera. Além disso, você deve ter pelo menos uma instrução executável entre as palavras-chave LOOP e END LOOP.

Agora que sabemos como podemos usar as instruções de loop em PL/SQL, vamos dar uma olhada no tratamento excepcional em PL/SQL.

Manuseio excepcional

Em PL/SQL qualquer tipo de erro é tratado como exceção. Uma exceção pode ser tratada como uma condição especial que pode alterar ou alterar o fluxo de execução. Em PL/SQL, existem dois tipos de exceções.

  • Exceção do sistema – Ele é gerado pelo tempo de execução do PL/SQL quando detecta um erro.

  • Exceção definida pelo programador – Essas exceções são definidas pelo programador em uma aplicação específica.


Definindo uma exceção

Uma exceção em PL/SQL deve ser declarada antes que possa ser levantada. Podemos definir a exceção usando a palavra-chave EXCEPTION como fizemos no exemplo abaixo.

EXCEPTION_NAME EXCEPTION;

Para gerar uma exceção, usamos a palavra-chave RAISE.
RAISE EXCEPTION_NAME;

Então isso foi tudo sobre PL/SQL, espero que este artigo tenha ajudado você a agregar valor ao seu conhecimento. Para obter mais informações sobre SQL ou bancos de dados, você pode consultar nossa lista de leitura abrangente aqui:Bancos de dados Edureka .

Se você deseja obter um treinamento estruturado sobre MySQL, confira nosso Treinamento de certificação de DBA MySQL que vem com treinamento ao vivo conduzido por instrutor e experiência de projeto na vida real. Este treinamento ajudará você a entender o MySQL em profundidade e a dominar o assunto.

Tem alguma pergunta para nós? Por favor, mencione-o na seção de comentários do ”Tutorial PL/SQL ” e eu entrarei em contato com você.