Banco de Dados - Oracle
Definições básicas - PL/SQL
Nesta coluna vou descrever uma visão geral sobre definição, estrutura, blocos, conceitos e secção em pl/sql.
por Márcio NovelliDefinições básicas - PL/SQL
- Linguagem proprietária da Oracle, criada para conferir possibilidades procedimentais aos programas de tratamento de dados
- Dois tipos de instruções:
- Construtores programáticos
- Comandos DML (SQL)
- Possui todas as capacidades programáticas das linguagens de terceira geração, com a flexibilidade, simplicidade e controlo avançado de erros, próprios de uma linguagem de quarta geração
Estrutura base
- Secções do PL/SQL:
- Secção declarativa
- Secção de execução
- Secção de tratamento de excepções
- Sintaxe da única secção obrigatória (execução):
<<nome_do_bloco>> DECLARE <declaração de variáveis> BEGIN <comandos procedimentais> <comandos SQL> EXCEPTION <tratamento de excepções> END; Estrutura base Begin Null; End; / Execute null; Exec null;
- Blocos PL/SQL aninhados:
Begin Null; begin null; end; Null; End; /
- Comentários:
- De linha (--)
- Multi-linha (/* */)set verify off set serveroutput on --para mostrar mensagens no ecran (TELA) begin /* package que vem com o Oracle e que permite escrever mensagens. É útil para fazer debug */ dbms_output.put_line("Olá a todos!"); end; / set verify on set serveroutput off
- Tipos de dados escalares
- Declaração de variáveis e constantes:
set verify off set serveroutput on def pl="dbms_output.put_line" <<teste>> declare x number(7,2); cidade varchar2(50) := "São Paulo"; texto varchar2(30) default "Márcio Novelli="; pi constant number(3,2) := 3.14; data date default sysdate; begin x:=3*pi; &pl(texto||nome||" e o 3*PI="||to_char(x)); &pl("A data é "||to_char(data,"dd/mm/yyyy")); declare x number(7,2); begin teste.x:=2; end; &pl(texto||nome||" e o 2*PI="||to_char(x)); end; / set verify on set serveroutput off
- Atributo de declaração por referência (%TYPE)
- Baseado numa variável
Declare preco number; pvp preco%TYPE; begin ...
- Baseado numa coluna de uma tabela
Declare nome tabela.livro%TYPE; begin ...
- Baseado numa variável
- Tipos de dados não escalares
- Tipos de dados compostos
- RECORD
- TABLE (com os métodos: EXISTS, COUNT, FIRST, LAST, PRIOR, NEXT, EXTEND, TRIM e DELETE)
- Outros tipos de dados não escalares (REF e LOB)
- Tipos de dados compostos
Secção declarativa
- Tipos de dados compostos:
declare type morada is record ( rua varchar2(50) not null, numero tabela_var_morada.num%TYPE, andar varchar2(12), localidade varchar2(80) default "SÃO PAULO", cod_postal varchar2(13) ); ... declare type aniversarios is table of date; declare type var_morada_tab is table of var_morada; declare type var_morada_tab is table of tabela_var_morada%ROWTYPE;
Nota: só existem duas colunas no tipo table que são o seu o seu índice de acesso (do tipo binary_integer) e o seu tipo de dados que pode ser escalar ou pode ser composto.
- Tipos de dados compostos (record):
set verify off set serveroutput on declare type morada is record ( rua varchar2(50), numero number(5), andar varchar2(12), localidade varchar2(80) default "SÃO PAULO", cod_postal varchar2(13) ); var_morada morada; begin var_morada.rua:="WWW.FREECODE.COM.BR - Coluna ORACLE"; dbms_output.put_line(var_morada.rua); dbms_output.put_line(var_morada.localidade); end; / set verify on set serveroutput off
- Tipos de dados compostos (table):
. TABLE (com os métodos: EXISTS, COUNT, FIRST, LAST, PRIOR, NEXT, EXTEND, TRIM e DELETE)
set verify off set serveroutput on declare type aniversarios is table of date index by binary_integer; var_aniversario; i binary_integer:=1; begin var_aniversario(1):=to_date("16/05/2004","dd/mm/yyyy"); var_aniversario (2):=to_date("17/06/2004","dd/mm/yyyy"); var_aniversario (3):=to_date("18/07/2004","dd/mm/yyyy"); var_aniversario (4):=to_date("19/08/2004","dd/mm/yyyy"); var_aniversario.delete(2); --apaga o elemento da posição 2 for i in 1.. var_aniversario.last loop if var_aniversario.exists(i) then dbms_output.put_line("Na posição "||to_char(i)||" está o valor "||to_char(var_aniversario(i),"dd/mm/yyyy")); end if; end loop; dbms_output.put_line("Nº de elementos ="||to_char(var_aniversario.count)); dbms_output.put_line("Primeiro ="||to_char(var_aniversario.first)); dbms_output.put_line("Último="||to_char(var_aniversario.last )); dbms_output.put_line("Anterior a 3 -"||to_char(var_aniversario.prior(3))); dbms_output.put_line("Seguinte 1 -"||to_char(var_aniversario.next(1))); end; / set verify on set serveroutput off
Por hoje é só pessoal, darei continuidade no próximo artigo.
Um forte abraços a todos , e até a próxima coluna !!!!!!!