Cadastre-se Revistas DevMedia Cursos
 

Space de RODRIGO VALENTIM
Busca Autor


Últimas 20 atualizações de RODRIGO VALENTIM

Artigo - Decode x Case

Decode x Case

 

Olá pessoal,

 

Neste artigo vou mostrar como trabalhar com o Case e o Decode, vou detalhar a funcionalidade, a diferença e qual o melhor.

 

1 – Funcionalidade: Temos duas formas de trabalhar com condição dentro de consultas em Oracle SQL, são elas o Case e o Decode. Os dois tem a mesma função, que é permitir de forma dinâmica e pratica como obter um retorno de uma coluna com base em uma condição, ou seja, ter a possibilidade de usar condições semelhantes ao IF-THEN-ELSE em consultas.

 

Assim, é possível definir de forma dinâmica e bem pratica o que será exibido na tela, evitando assim, consultas com retorno de colunas em branco, por exemplo.

 

2 – Diferença: O exemplo abaixo mostra o tipo de trabalho com o Case e o Decode. O Decode irá traduzir os valores passados por uma coluna com o esquema de codificação (1, 2, 3, 4) e irá retornar os valores decodificados (“Presidente”, “Diretor”, “Gerente”, “Funcionário”).

 

O Case é parecido com o Decode, eles tem uma forma de processo que vem lendo os valores da esquerda para a direita, avaliando um a um e quando encontra um valor verdadeiro, ele retorna o valor correspondente.

 

Por exemplo, você precisa saber qual o cargo referente ao código 2, então, ele irá pesquisar esse valor e quando achar, retornará o valor equivalente, ou seja, “Diretor”.

Qualquer expressão feita com o Case poderá ser feito com o Decode, mas é difícil ter a mesma flexibilidade e possivelmente, será desgastante escrever grandes códigos com o Decode. A Diferença entre os dois é praticamente essa, que na verdade, faz com que o Case seja melhor de se trabalhar.

Exemplos:

Decode

Case Simples

Case com Pesquisa

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
03/04/2007 08:10:00





Artigo - Função para retornar o Tempo em anos, meses, dias, minutos e horas

Função para retornar o Tempo em anos, meses, dias, minutos e horas

Oracle PL/SQL

Com este artigo pretendo passar para vocês a forma mais completa de ter como retorno a diferença entre duas datas, por exemplo, “a quanto tempo o funcionário está trabalhando nesta empresa?” Essa função utiliza um bloco feito em PL/SQL do Oracle. Esta funcionalidade é baseada em cálculos feito entre as datas e que também permite utilizar mascaras, assim, possibilitando que você tenha o número de anos, meses, dias, minutos e horas de uma maneira geral.

Criando a função

Ao criar esse tipo de função, você estará criando um objeto de banco de dados Oracle que poderá ser acessado por qualquer usuário conectado ao banco, desde que o usuário tenha acesso a consultá-lo.

CREATE OR REPLACE

FUNCTION schema.retorna_tempo

 (P_DT_INICIAL IN DATE

 ,P_MASC IN VARCHAR2 := Null

 ,P_DT_FINAL IN DATE := Null

 )

 RETURN VARCHAR2

 IS

Type Rec_Tempo Is Record(

   Qtd   Integer

  ,str Varchar2(10) );

vIndice    Integer := 0;

vMascara   Varchar2(60);

vData Date;

vRetorno   Varchar2(100);

vCaracter  Char(01);

vOculta     Boolean := False;  -->> False Oculsta, true exibe

vAno  Rec_Tempo; -->> Registro que irá armazenar o Ano

vMes  Rec_Tempo; -->> Registro que irá armazenar o Mes

vDia  Rec_Tempo; -->> Registro que irá armazenar o Dia

vHora  Rec_Tempo; -->> Registro que irá armazenar a Hora

vMin  Rec_Tempo; -->> Registro que irá armazenar o Minuto

BEGIN

  /*A função NVL é utilizada sempre que queremos que um determinado processo seja executado sem falhas, com isso

  quando encontra um parametro ou retorno da consulta com a possibilidade de ser nulo, utilizando a função para impedir

  que algum erro ocorra.*/

  vData := Nvl(P_DT_FINAL,Sysdate);

  vMascara       := Nvl( P_MASC, 'a' ); /*Estou deixando como mascará default, a de Ano*/

  vAno.Qtd := TO_CHAR(vData,'YYYY') - TO_CHAR(P_DT_INICIAL,'YYYY');

  IF vData - ADD_MONTHS( Trunc(P_DT_INICIAL), vAno.Qtd * 12 ) < 0 THEN

    vAno.Qtd := vAno.Qtd - 1;

  END IF;

  vMes.Qtd := Trunc(MONTHS_BETWEEN( vData, ADD_MONTHS( P_DT_INICIAL, vAno.Qtd * 12 ) ));

  vDia.Qtd := Trunc(vData - ADD_MONTHS( P_DT_INICIAL, (vAno.Qtd * 12) + vMes.Qtd ));

  vHora.Qtd := Trunc((vData - (ADD_MONTHS( P_DT_INICIAL, (vAno.Qtd * 12) + vMes.Qtd ) + vDia.Qtd))*24);

  vMin.Qtd := Trunc((vData - (ADD_MONTHS( P_DT_INICIAL, (vAno.Qtd * 12) + vMes.Qtd ) + vDia.Qtd))*24*60 - (vHora.Qtd*60));

  If vAno.Qtd > 1 Then

    vAno.str := 'Anos';

  Else

    vAno.str := 'Ano';

  End If;

  If vMes.Qtd > 1 Then

    vMes.str := 'Meses';

  Else

    vMes.str:= 'Mês';

  End If;

  If vDia.Qtd > 1 Then

    vDia.str:= 'Dias';

  Else

    vDia.str:= 'Dia';

  End If;

  If vHora.Qtd > 1 Then

    vHora.str:= 'Horas';

  Else

    vHora.str:= 'Hora';

  End If;

  If vMin.Qtd > 1 Then

    vMin.str:= 'Minutos';

  Else

    vMin.str:= 'Minuto';

  End If;

  vCaracter := Substr( vMascara, 1, 1 );  -->> Retorna o primeiro caracter da mascara

  If vCaracter = '#' Then  -->> O primeiro caracter sendo "#" indica que deverá inibir as informações zeradas

    vOculta := True;

    vIndice := 2;

    vCaracter := Substr( vMascara, 2, 1 );

    If vCaracter Is Null Then  -->> No caso da máscara ter apenas o caracter "#" então a função retornará Null

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
14/03/2007 20:02:00





Artigo - Boas Vindas

Boas Vindas

É com muita felicidade e satisfação que aceitei o convite de Gustavo Spindola para ser colunista deste portal SQL Magazine. Sempre freqüentei o mesmo por aqui encontrar ótimos colunistas e um material enriquecedor, agora, fazer parte deste grupo, é mais do que o esperado. Queria deixar aqui meus agradecimentos pelo convite e os parabéns para equipe por seu excelente trabalho.

 

Tenho 26 anos e o meu primeiro contato com o Banco de Dados Oracle foi em 1999, aos 19 anos, por quase ser reprovado na matéria banco de dados do meu Curso Técnico de Desenvolvimento de Software. Foi o inicio, um desafio, que me fez ver e conhecer a maravilha que é este Banco de Dados. Hoje, Depois de 8 anos, sou Desenvolvedor Oracle a 5 anos, utilizando o SQl, PL/SQL, Forms e Reports como ferramenta de trabalho diário. Queria pedir também um retorno, o famoso feedback, para saber o que é mais interessante para vocês, assim, poder produzir algo cada vez mais proveitoso, tentando sempre ser o mais claro possível para poder passar todas as informações da melhor forma possível.

 

Em meus artigos, vou focar o Banco Oracle e sua linguagem SQL e PL/SQL, pretendo passar dicas para Desenvolvedores de como melhorar o custo de um relatório, elaboração de blocos PL/SQL para determinadas rotinas, entre outras. Meus artigos serão quinzenais.

 

Caso queira entrar em contato comigo, utilize meu e-mail: rodrigo.valentim@gmail.com

 

-->">
13/03/2007 08:53:00





 

Rodrigo Valentim (rodrigo.valentim@gmail.com), Analista e Desenvolvedor de Rotinas Hospitalares no Hospital São Rafael.
Arquivo de atualizações
 2007

Estatísticas do Autor:
Número de posts: 3
Características dos posts deste autor:
Conteúdo:
Utilidade:
8 3
 
DevMedia Group - Tel: (21) 3382-5038 - www.devmedia.com.br
Todos os Direitos Reservados a DevMedia Group