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;