sexta-feira, 29 de julho de 2011

Tópico: Output messages in PL/SQL

Ok, para este tópico, não usarei o Oracle SQL Developer, mas o Oracle SQL*Plus;
Estou usando a versão 8, mas não se preocupem, isto em nada influenciará os nossos estudos. Para começarmos a lançar mensagens, teremos que habilitar o servidor de saída. Usamos a instrução ‘SET SERVEROUTPUT ON’. Você só precisa fazer isto uma vez para cada sessão, ou seja, o servidor estará habilitado até o momento em que você fechar o SQL*Plus.


Ok, agora vamos construir um Bloco Anônimo PL/SQL (já sabemos do que se trata) que vai nos retornar uma mensagem através do servidor que acabamos de ativar.
Começamos com o velho e bom ‘BEGIN’ e agora vem a novidade.

DBMS_OUTPUT.PUT_LINE(‘OLÁ! MEU NOME É RUDAK!’);

Para não me esquecer de algumas instruções, gosto de fazer certas analogias. Como não me esquecer de uma instrução deste tamanho?

DBMS -> Isto me parece ser um sigla de DataBase MeSsage (mensagem da base de dados).
DBMS_OUTPUT -> Eu traduziria isto como ‘Mensagens de saída da base de dados’
PUT_LINE -> Coloque uma linha com o conteúdo entre parênteses e avança para a próxima linha.

Obs.: para confirmar uma linha no SQL*PLUS (pular linha) use a tecla ENTER. XD;
Nosso bloco ficará assim:

BEGIN
  DBMS_OUTPUT.PUT_LINE (‘OLÁ! MEU NOME É RUDAK!’);
END;
/
 A barra serve para dizer ao compilador “Ok compilador! Compile o bloco PL/SQL acima!”. Já vimos que no Oracle SQL Developer não é preciso usá-la.


Resultado: ele ‘printou’ na tela a mensagem que especificamos e depois confirmou o sucesso da operação.
Pense no DBMS_OUTPUT como uma classe. Sendo uma classe, ele pode conter vários métodos. E têm. Vejamos alguns deles:

1)PUT_LINE: Já vimos como funciona, retorna uma mensagem e pula para a próxima linha. Mais tarde veremos que esta mensagem pode vir concatenada à uma variável.
Exemplo:
BEGIN
  DBMS_OUTPUT.PUT_LINE(‘OLÁ! MEU NOME É RUDAK!’);
END;
/
2)PUT: Retorna uma mensagem e mas não pula para a próxima linha. Vejamos o exemplo a seguir:
Exemplo:
BEGIN
   DBMS_OUTPUT.PUT(‘OLÁ! MEU NOME É’);    
   DBMS_OUTPUT.PUT(‘ RUDAK!’);                       
END;
/

O resultado da execução deste bloco será “OLÁ! MEU NOME É RUDAK!” Notaram que ele não pulou uma linha?

3)NEW_LINE: Este método simplesmente cria uma linha em branco, ou se você preferir, pula uma linha.
Eu diria que o PUT_LINE é um cruzamento de um PUT com um NEW_LINE. XD

PUT_LINE = PUT + NEW_LINE;

Exemplo:
BEGIN
   DBMS_OUTPUT.PUT (‘OLÁ! MEU NOME É’);
   DBMS_OUTPUT.NEW_LINE;
   DBMS_OUTPUT.PUT_LINE(‘ RUDAK!’);
END;
/
Agora sim pulou para a linha debaixo!

Valeu pessoal, até a próxima!

quinta-feira, 21 de julho de 2011

Tópico: Identify the different types of PL/SQL blocks

Boa tarde pessoal! Acredito que já abordamos este assunto, contudo, vamos nos aprofundar um pouco mais agora. O que podemos entender por “Identificar os diferentes tipos de blocos PL/SQL”? Se você não entende nada, vamos por partes: o que podemos entender por um “bloco PL/SQL”?

Bloco PL/SQL
Ao meu entender, podemos considerar um bloco PL/SQL como sendo aquele bloco que possui as estruturas mínimas para se executar um comando PL/SQL sem gerar erros (diferente de exceções); Se um bloco gera erro, ele não executa, logo, não é um bloco PL/SQL válido.  Segue a estrutura padrão de um bloco PL/SQL:

[DECLARE]  --Isto não é obrigatório!
 --declaração de variáveis, cursores, etc.

BEGIN
--seu código aqui!
[EXCEPTION] --Isto também não é obrigatório
 --tratamento de exceções (falhas)

END;


Entendendo:

Seção Declarativa/DECLARE: Contém todas as variáveis, constantes, cursores e exceções definidas pelo usuário que são referenciadas nas seções executável e declarativa (Opcional)
Seção Executável/BEGIN: Contém instruções SQL para manipular dados no banco de dados e instruções PL/SQL para manipular dados no bloco (Obrigatória)
Seção Tratamento de exceção/EXCEPTION: Especifica as ações a desempenhar quando erros e condições anormais surgem na seção executável (Opcional).


 Como já foi citado antes, segue o bloco PL/SQL mínimo aceitável:


BEGIN
  NULL;
END;

Este bloco é um bloco PL/SQL aceitável, pois ao executá-lo, nenhum erro ocorre apesar deste comando ser inútil...
Este tipo de bloco é conhecido com Bloco Anônimo. Anônimo – Sem identificação, sem nome. E o que tornaria um bloco em “não anônimo”?


Bloco de Procedimento/Procedural: nada mais é do um bloco PL/SQL nomeado. A grande vantagem sobre um bloco PL/SQL anônimo é que pode ser compilado e armazenado no banco de dados como um objeto de schema. Graças a essa característica as procedures são de fácil manutenção, o código é reutilizável e permitem que trabalhemos com módulos de programa.


Ex.:

CREATE PROCEDURE INUTIL AS

  BEGIN
    NULL;
  END;


Olhem só que legal! Criamos uma procedure (bloco PL/SQL nomeado e armazenado) que não serve pra p!@#$ nenhuma! Mas criamos! Se você estiver usando o Oracle SQL Developer, pode visualizá-la aqui:
 
Como visualizar uma procedure criada no Oracle SQL Developer

It’s alright! It’s ok! Vamos tentar executar novamente o mesmo bloco? Só para ver o que acontece:


Erro gerado ao tentar se executar novamente o mesmo bloco PL/SQL pela segunda vez


Porque deu erro se a procedure não está errada? Pelo simples motivo de ela já existir! Podemos proceder de duas formas: ou atualizamos a nossa procedure, ou mudamos o nome e criamos outra. Para atualizar, basta adicionarmos o comando OR REPLACE logo após o comando CREATE, deixando o nosso bloco assim:

CREATE OR REPLACE PROCEDURE INUTIL AS
  BEGIN
    NULL;
  END;

Entendendo o bloco: através no nome da procedure, o bloco verifica se já existe outra procedure com o mesmo nome; se não existir, ele cria (CREATE). Se existir, ele substitui (OR REPLACE). Simples assim.


Certo, mas e agora, o que faço com uma procedure após cria-la? Podemos executá-la em outro bloco PL/SQL! Qual o nome da nossa procedure? INUTIL! Então basta chama-la da seguinte forma:


BEGIN
  INUTIL;
END;

Como a procedure INUTIL nada faz, este bloco também nada fará. Mas que tal darmos uma razão de ser à nossa procedure? Para isto, seguiremos para o próximo tópico - Output messages in PL/SQL.

terça-feira, 19 de julho de 2011

Tópico - Explain the advantages of PL/SQL

PL / SQL é uma linguagem de processamento de transações, que oferece as seguintes vantagens:

- Suporte para SQL - SQL é flexível, poderoso e fácil de aprender.
- Suporte para programação orientada a objeto
- Melhor desempenho - com PL / SQL, um bloco inteiro de declarações podem ser enviadas para o Oracle de uma vez.
- Maior produtividade - PL / SQL aumenta a produtividade, permitindo o uso de ferramentas de melhor.
- A portabilidade plena - PL / SQL são portáveis ​​para qualquer sistema operacional e plataforma na qual o Oracle é executado.
- Integração com o Oracle
- Segurança PL / SQL pode conseguir abstração de dados, controle de acesso.



E mais:


Integração

- A linguagem PL/SQL desempenha um papel central tanto para o Oracle Server através de procedimentos armazenados, funções armazenadas, gatilhos de banco de dados e pacotes.
- Além de os tipos de dados SQL também serem usados no código PL/SQL.
-Combinados com o acesso direto que a linguagem SQL fornece, esses tipos de dados compartilhados integram a linguagem PL/SQL com o dicionário de dados do Oracle Server.

Melhora o Desempenho

- Reduz o Tráfego da Rede, visto que ele agrupa as instruções SQL em um único bloco e envia esse bloco inteiro para o servidor em uma única chamada.
- A linguagem PL/SQL também pode cooperar com as ferramentas de desenvolvimento de aplicação do Oracle Server como, por exemplo, Oracle Developer Forms e Reports. Ao adicionar recursos de processamento procedural a essas ferramentas, a linguagem PL/SQL aumenta o desempenho.

sexta-feira, 15 de julho de 2011

Os tipos de variáveis em PL/SQL

Antes de tudo, tenhamos em mente o seguinte:

Identificadores: São os "nomes" ou 'apelidos' que damos aos elementos, tais como tabelas, cursores ou variáveis.  Podem ter até 30 (trinta) caracteres de comprimento, devem começar com uma letra e podem ter qualquer combinação de letras, números ou caracteres especiais, tais como $, # e _.

Tipos de dados escalares

Todas as constantes e variáveis definidas em nossos programas contém um tipo de dado. É este tipo de dado que determina o formato de armazenagem, as restrições em como a variável pode ser usada e quais valores a variável pode conter. Um tipo de dado escalar é atômico, isto significa que ele não é formado por outros tipos de dados. O PL/SQL tem dois tipos de dados compostos, eles são registros e tabelas.

Tipos de Dados do PL/SQL

VARCHAR2 - Conjunto de caracter de comprimento variável

CHAR - Conjunto de caracter de comprimento fixo

NUMBER - Números fixos ou de ponto flutuante

BINARY_INTEGER - Valores de inteiros

PLS_INTEGER - Números para cálculos rápidos de inteiros

DATE – Datas

BOOLEAN - Valores True / False

NVARCHAR2 - Conjunto de caracter de comprimento variável que usam o conjunto nacional de caracteres

NCHAR - Conjunto de comprimento fixo que usam o conjunto nacional de caracter

ROWID - Usado para armazenar rowids físicos (Endereço físico do registro no Banco de Dados)

UROWID - Usado para armazenar rowids físicos e lógicos

LONG - Usado para armazenar conjuntos longos de caracter

LONG RAW - Usado para armazenar grandes quantidades de dados binários e figuras

RAW - Usado para armazenar dados binários

O que é NULL?

Esta é uma pergunta que é feita todo o tempo, mesmo assim muitas pessoas realmente não sabem qual é a resposta! NULL é desconhecido. Tenha sempre essas duas coisas em mente:

"Um Null nunca é igual a nada."


"Um Null nunca é igual a algo."

A próxima questão deve ser, 'Como comparar coisas com valores nulos?' É onde verificamos se o valor IS NULL ou se IS NOT NULL.

Declaração de variáveis

Antes que você possa referenciar uma variável, ela deve ser definida. Quando você declara a variável, o PL/SQL aloca memória para armazenar a variável. A sintaxe para a declaração das variáveis é a seguinte:

variable_name datatype [atribuição opcional];

por exemplo:

ano_da_maioridade number = 18;

Nossas declarações podem ser limitadas ou não-limitadas. Isto significa que podemos especificar a magnetude do valor que pode ser atribuído à variável. Nossa variável Number suporta até 38 dígitos, se não limitada. O PL/SQL alocará toda a memória que é necessária para armazenar 38 dígitos. Se limitarmos a variável usando number(2), então o PL/SQL alocará apenas a memória para armazenar os dois dígitos.

Declarações Ancoradas

Variáveis ancoradas referem-se ao uso da declaração %TYPE. O que o PL/SQL está fazendo é ancorar o tipo de dado de uma variável àquele de uma outra estrutura de dados, geralmente de uma coluna de uma tabela. O benefício de tipos de dados de variáveis ancoradas em programas PL/SQL com colunas de bancos de dados é que quando as declarações base mudam, o código PL/SQL não precisa ser alterado.

Dicas sobre uso de variáveis

Sempre use nomes claros e tente estabelecer uma convenção de nomes para seus diferentes tipos de variáveis. Evite variáveis recicláveis. Leia esta instrução como NUNCA recicle variáveis. Reusar nomes de variáveis com o mesmo programa pode causar mais problemas do que você poderia imaginar. Tente depurar algum assim qualquer dia!

Use constantes nomeadas sempre que possível e evite o uso de valores numéricos.

Remova variáveis não usadas de seus programas PL/SQL. Muitos programas PL/SQL desenvolvem-se, em muitos casos, através de muitos anos e muitas versões.

Quando as variáveis não estiverem mais sendo usadas, remova-as do programa. Isto tornará o código muito mais fácil de entender.

Se a variável representa uma coluna de banco de dados, então ancore a variável à coluna do banco usando a declaração %type.

fonte: http://imasters.com.br/artigo/1466/oracle/variaveis-no-pl-sql

terça-feira, 12 de julho de 2011

Tópico: Explain the need for PL/SQL

Olá galera, boa tarde!

Para este tópico, copiei diretamente a definição do guia de estudos da própria ORACLE, intitulado "Introdução ao Oracle: SQL e PL/SQL Guia do Estudante • Volume 2". Segue a definição:


"A linguagem PL/SQL (Procedural Language/SQL) é uma extensão de linguagem procedural da
Oracle Corporation para SQL, a linguagem de acesso a dados padrão para bancos de dados
relacionais. A linguagem PL/SQL oferece recursos de engenharia de software modernos, como, por
exemplo, a encapsulação de dados, o tratamento de exceções, a ocultação de informações e a
orientação a objeto, etc., trazendo os recursos de programação mais modernos para o Oracle Server
e o Toolset.
A linguagem PL/SQL incorpora muitos recursos avançados criados em linguagens de programação
projetadas durante as décadas de 70 e 80. Além de aceitar a manipulação de dados, ele também
permite que as instruções de consulta da linguagem SQL sejam incluídas em unidades procedurais
de código e estruturadas em blocos, tornando a linguagem SQL uma linguagem avançada de
processamento de transações. Com a linguagem PL/SQL, você pode usar as instruções SQL para
refinar os dados do Oracle e as instruções de controle PL/SQL para processar os dados."


"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."

É bom saber, para o caso de na prova cair alguma questão conceitual (teórica). Até o próximo tópico!

sábado, 9 de julho de 2011

Bloco: Oracle Database 11g: PL/SQL Fundamentals / Tópico: Introduction to PL/SQL

PL/SQL? O que é isso?

Literalmente falando, a sigla significa Procedural Language/Structured Query Language (Linguagem Procedural/Linguagem de Consulta Estruturada).  


Para a definição de Linguagem Procedural visite o seguinte link: 

http://pt.wikipedia.org/wiki/Linguagem_Procedural 


Para a definição de Linguagem de Consulta Estruturada visite este:


http://pt.wikipedia.org/wiki/SQL

E sobre o PL/SQL, visite:

http://pt.wikipedia.org/wiki/PL/SQL

A seguir, vejamos a estrutura padrão de um bloco PL/SQL:

[DECLARE]  --Isto não é obrigatório!
 --declaração de variáveis, cursores, etc.
BEGIN
--seu código aqui!
[EXCEPTION] --Isto também não é obrigatório 
 --tratamento de exceções (falhas)
END;


Verifique que:


1 - Quando uma estrutura está entre colchetes ( [nome_da_estrutura] ) significa que ela não é obrigatória;
2 - O bloco PL/SQL mais simples que existe é o seguinte:


BEGIN
   NULL;
END;


O NULL (Nulo, vazio) é necessário para que não ocorram erros de compilação, já que o PL/SQL não permite a compilação de código sem nada escrito no bloco BEGIN. Faça o teste!   


3 - A simbologia "--" significa um comentário de código. Tudo o que estiver depois desta estrutura não será interpretador pelo compilador, ou seja, não influenciará na compilação do seu código PL/SQL;


Ex.:  
BEGIN
 NULL;
 --isto é um comentário e em nada influenciará no meu código!
END;


Qual o resultado disto? O mesmo resultado do código anterior: Nada! Às vezes estamos lidando com um código muito extenso, o que dificulta a correção de erros que eventualmente surgirão no decorrer do desenvolvimento de um sistema . Os comentários auxiliam e muitas vezes se tornam cruciais para uma boa interpretação do código e da lógica envolvida. Cenas dos próximos capítulos!


Bom, acredito que com este post consegui guiar uma pequena introdução ao PL/SQL. As definições foram vistas e o básico do básico foi discutido aqui. Outra: sintam-se à vontade para participar! Como eu bem expliquei, estou estudando e o meu objetivo é aprender também! Boa noite e até o próximo tópico!   

quarta-feira, 6 de julho de 2011

Últimas considerações iniciais

Boa noite!

Antes de colocar a mão na massa, vamos colocar tudo em pratos limpos; vou partir do pressuposto de que você já possui o Oracle Database 11g instalado no seu desktop. Se ainda não tiver, aconselho seguir o seguinte link, me ajudou bastante! Eu configurei o meu como Enterprise.

http://cstsystem.ithub.com.br/2011/03/12/instalacao-do-oracle-11g-windows-7-parte-i/

Tudo lindo, tudo ok, vamos ao que interessa: o conteúdo da prova. Visite o seguinte link, fala só tudo sobre a prova:

http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=41&p_exam_id=1Z0_144&p_org_id=1001&lang=US

Nesta página podemos ver o tempo de prova, score necessário para se obter a certificação aprovação na prova (para se obter a certificação OCA é necessário ser aprovado em duas provas, como descrito no link), preço e o conteúdo. Ao que me parece, a prova foi dividida em dois grandes grupos de conteúdos:

1 - Oracle Database 11g: PL/SQL Fundamentals;
2 - Oracle Database 11g: Develop PL/SQL Program Units.

Salve esta página nos seus favoritos, ela será o nosso guia de estudos!
Usarei o Oracle SQL Developer no decorrer dos nossos estudos, mas nada que proiba você de usar o SQL Plus, PL/SQL Developer, Toad, etc. Prepare-se. Começaremos a brincadeira no próximo post. Até lá!! XD

terça-feira, 5 de julho de 2011

O meu material de estudo

Bom, comprei um livro chamado "Oracle Database 11g - PL/SQL Programação", de Michel McLaughlin, Professor de Tecnologia da Informação na BYU - Idaho. Na minha humilde opinião, este livro tem como pontos negativos alguns erros ortográficos e algumas traduções meio "confusas"; como ponto positivo, ele apresenta uma didática maravilhosa e como o autor mesmo explica: "Este livro foi concebido para ser lido do começo ao fim por aqueles que são iniciantes em PL/SQL". É por ele que vou estudar para a prova 1Z0-144 (Oracle Database 11g: Program with PL/SQL) ; qualquer outra fonte de pesquisa que eu utilizar postarei aqui. ^^ 


No site da Oracle existem cursos para melhor se preparar para as provas... mas a minha atual realidade não permite tais investimentos; mas lá existe também uma lista com todo o conteúdo a ser explorado na prova. Pra que mais? Conteúdo na mão + Google + Livro = certificação em Dezembro de 2011, se Deus quiser!!!

Primeiro post

Hello world!


Olá! Estou aqui com o intuito de registrar a minha saga rumo às certificações Oracle! Aqui está o caminho que pretendo trilhar:





A primeira é a OCA (Oracle Certified Associate). Estou me preparando para a prova 1Z0-144 (Oracle Database 11g: Program with PL/SQL). Depois farei a 1Z0-051 (Oracle Database 11g: SQL Fundamentals I). Pra que vou postar o fruto dos meus estudos aqui? Por que acredito que ao escrever fixo melhor o conhecimento adquirido ao longo dos estudos e por acreditar que o conhecimento é algo para ser desenvolvido e compartilhado. Então, let's go! Obrigado e boa noite!