domingo, 19 de setembro de 2021

PL/SQL Resumo

 O PL/SQL é uma extensão da linguagem padrão SQL para o SGBD da Oracle. É uma linguagem procedural da Oracle que estende a linguagem SQL. Permite que a manipulação de dados seja incluída em unidades de programas.

Todo programa possui variáveis, estruturas de condição, estruturas de repetição, unidades de programas reutilizáveis(funções e procedimentos) comandos para receber e exibir valores. 

Além disso, o PL/SQL possibilita a integração com ferramentas Oracle, portabilidade e o tratamento de exceções.

Assuntos a serem tratados:



Nesse primeiro post vamos falar sobre as estruturas presentes em um programa e variáveis

(bloco anônimo)

DECLARE --(opcional)

–-Variáveis, cursores e exceções definidas pelo usuário

BEGIN --(obrigatório)

–-Instruções SQL

–-Instruções PL/SQL

EXCEPTION --(opcional)

–- Ações a serem executadas quando ocorrerem exceções

END; --(obrigatório)

Blocos nomeados

-- Procedures(Não retornam valor)

PROCEDURE name
IS
BEGIN
 --statements
[EXCEPTION]
END;

--Funções (retornam valor)

FUNCTION name
RETURN datatype
IS
BEGIN
 --statements
 RETURN value;
[EXCEPTION]
END;

Variáveis (PL/SQL, de substituição e de ligação)

/*
Para habilitar a saída no SQL Developer, execute o 
seguinte comando antes de executar o bloco PL/SQL:
SET SERVEROUTPUT ON
2. Utilize um pacote Oracle predefinido e seu procedure no 
bloco anônimo:
– DBMS_OUTPUT.PUT_LINE
*/

set SERVEROUTPUT ON;
--variáveis plsql
DECLARE 
V_NOME VARCHAR2(50):= 'Habbema';
BEGIN 
DBMS_OUTPUT.PUT_LINE(V_NOME); -- pacote e procedure que permite exibir o valor de variáveis
END;

--Variáveis de substituição

DECLARE 
V_NOME VARCHAR2(50):= '&nome';
BEGIN 
DBMS_OUTPUT.PUT_LINE(V_NOME); -- pacote e procedure que permite exibir o valor de variáveis
END;

--variáveis de ligação (BIND)

VARIABLE b_nome VARCHAR(20)
EXEC :b_nome :='TESTE';
BEGIN
  DBMS_OUTPUT.PUT_LINE(:b_nome);
END;

--Declarando  e inicializando variáveis

DECLARE
 v_myName VARCHAR2(20);
BEGIN
 DBMS_OUTPUT.PUT_LINE('My name is: '|| v_myName);
 v_myName := 'John';
 DBMS_OUTPUT.PUT_LINE('My name is: '|| v_myName);
END;

-- referenciando uma variável do tipo bind

VARIABLE b_emp_salary NUMBER
BEGIN
 SELECT salary INTO :b_emp_salary 
 FROM employees WHERE employee_id = 178; 
END;
/
PRINT b_emp_salary
SELECT first_name, last_name
FROM employees
WHERE salary=:b_emp_salary;

-- variáveis compostas
--registro
DECLARE
 TYPE t_rec IS RECORD
 (v_sal number(8),
 v_minsal number(8) default 1000,
 v_hire_date employees.hire_date%type,
 v_rec1 employees%rowtype);
 v_myrec t_rec;
BEGIN
 v_myrec.v_sal := v_myrec.v_minsal + 500;
 v_myrec.v_hire_date := sysdate;
 SELECT * INTO v_myrec.v_rec1
 FROM employees WHERE employee_id = 100; 
 DBMS_OUTPUT.PUT_LINE(v_myrec.v_rec1.last_name ||' '||
 to_char(v_myrec.v_hire_date) ||' '|| to_char(v_myrec.v_sal));
END;