A todos que estão iniciando as queries do Oracle, ou mesmo aqueles que já trabalham a algum tempo, podem utilizar essas dicas rápidas na montagem de queries de forma a já deixa-la de uma forma simples, com sua execução mais rápida.

Lembro a todos que as dicas aqui são para quem já conhece a estrutura de queries SQL, para quem não conhece sugiro estudar um pouco primeiro para que então possa entender melhor o que será colocado aqui.

Alguns de vocês já devem ter ouvido que o Oracle lê as tabelas das queries de baixo para cima, mas o que isso quer dizer? Quer dizer que a ordem em que você coloca as tabelas no FROM da query, influencia na performance que ela te dá. Você deve colocar primeiro as que tem menos filtros e por último as que tem mais, sei que não é fácil de entender só assim então dou um exemplo:

Temos as seguintes tabelas:

PRODUTO, PEDIDO, PEDIDO_PRODUTO

Se você quiser montar um select que traga todos os dados de um determinado pedido, o filtro mais forte que você tem é da tabela pedido, então você deve coloca-la por último. Em seguida é a tabela que relaciona o Pedido com o Produto, então ela fica em penúltimo e depois o produto (é a sequencia lógica de encadeamento). Então a query ficaria melhor se o from dela fosse assim:

SELECT * FROM PRODUTO, PEDIDO_PRODUTO, PEDIDO

Com essa pequena e rápida dica, em alguns casos, já melhora muito a performance de algumas queries.

Outras dicas importantes são:

  • Evitar usar OR na clausula WHERE
  • Não usar funções nos valores ou campos de primary key, pois assim eles não usaram seus indices

Espero que com essas poucas e rápidas dicas vocês tenham ganhos em seus trabalhos.

  • Como listar os locks no Oracle
  • Funções de data para Oracle
  • Computador velho tem salvação. Transforme ele.
  • Gerador automático de Letras para Nick – várias opções
  • Procurando e baixando torrent de graça e sem instalação
  • Postado por Meison Almeida On July - 19 - 2010 Desenvolvimento/Programação

    O erro de PLSQL ORA-00947 Not Enough Values, é bem simples de ser resolvido. Ele diz o que acontece literalmente em ingles. “Não há valores suficientes”. Ou seja, quando se faz um INSERT que deve ser informada 3 colunas, mas nos valores só vão 2, esse erro ocorre, como no exemplo abaixo:

    insert into cliente(id_cliente, nome, rg) values(1, ‘Joaozinho’);

    O comando insert deixa claro que são 3 colunas a serem identificadas, mas só duas estão preenchidas no values. Isso acontece também com insert select, como abaixo:

    insert into cliente(id_cliente, nome, rg) select id_cliente, nome from cliente_temp;

    Para esses comandos não resultar em erro, é só adicionar a coluna ficando dessa forma:

    insert into cliente(id_cliente, nome, rg) values(1, ‘Joaozinho’, ‘12345678-9′);

    insert into cliente(id_cliente, nome, rg) select id_cliente, nome, rg from cliente_temp;

  • Como listar os locks no Oracle
  • Dicas rápidas para tunning (performance) em queries do Oracle
  • Funções de data para Oracle
  • Como resolver o erro ORA-01422
  • Vagas disponíveis do mes de Julho
  • Postado por Meison Almeida On February - 27 - 2010 Desenvolvimento/Programação

    A algum tempo atrás escrevi um artigo sobre como fazer jogos, contei mais minha experiencia sobre fazer jogos. Fiz o colegial técnico (é no meu tempo era colegial rs) e nele meu projeto de final de curso foi um jogo, no artigo Quer saber como fazer um jogo? está bem explicada essa história.

    Mas de qualquer forma muita gente fica querendo e perguntando como fazer um jogo, volto a afirmar não é fácil fazer um jogo, por mais simples que seja, mas tem algumas ferramentas que facilitam fazer um jogo bem simples. Não vá pensando que você vai fazer um jogão, você pode inovar bastante se sua idéia for boa, mas a qualidade não será tão boa, para isso é preciso muito tempo e muito estudo de programação, SIM É POSSÍVEL, só precisa de dedicação.

    Um desses programas que ajudam quem não sabe muito de programação é o Scirra Construct, que pode ser baixado aqui: http://www.baixaki.com.br/download/scirra-construct.htm

    Nele você pode usar alguns elementos base e criar seu próprio jogo o bom é que ele é gratuito.

    Experimente e se quiser compartilhe os seus jogos aqui.

  • Quer saber como fazer um jogo?
  • GTA IV – Maior lançamento de games para PS3 e XBOX 360
  • O Médico e a Mula
  • GTA IV – Um dos jogos mais esperados para este ano
  • Cadu ganha telefonema em jogo no BBB
  • Postado por Meison Almeida On February - 25 - 2010 Desenvolvimento/Programação Downloads Jogos Utilitários

    O maior aquário do mundo dentro de um shopping de Dubai, possui a maior area de visualização também, ou seja, muito vidro. O vidro desse aquário possui 76cm de expessura e teve uma rachadura que causou uma inundação e provocou também o evacuamento de uma parte do shopping, mas nenhum animal nem pessoa foram feridos.

    Vejam fotos do aquario abaixo:

    Arraias no aquario

    Tubarões

  • Protetor de tela Super Realista de Aquario
  • Promoção Dia Dos Pais da HP/COMPAQ sorteia viagem para Dubai
  • Miley Cyrus (Hannah Montana) explica o incidente das fotos indiscretas
  • Fotos inéditas do acidente de Diana são liberadas pela Justiça Britanica
  • Treco – A histório do narrador do Mundo Canibal
  • Postado por Meison Almeida On February - 25 - 2010 Notícias

    Em banco de dados é muito usual tratarmos de datas, particularmente gosto muito do Oracle e acho que ele não deve em nada nessa parte, ainda mais para quem utiliza a própria linguagem da Oracle o PL-SQL.

    Aqui irei abordar alguns comandos para trabalhar com datas no Oracle.

     

    Formatando Datas

    Para formatar datas você usa o comando de converter para caracter o TO_CHAR, ele irá converter para String a DATA e nessa conversão você poderá informar o formato que você quiser e inventar o seu inclusive, você pode usar os seguintes caracteres para identificar cada elemento da data:

    DIA: ‘DD’ (Dia em Números), ‘DDTH’ (Dia em Números no formato americano 15TH), ‘DAY’ (Dia por extenso)

    MES: ‘MM’ (Mês em Números), ‘MON’ (Mes por extenso)

    ANO: ‘YY’ (Ano em dois algarismos), ‘YYYY’ (Ano com 4 algarismos),  ‘RR’ e ‘RRRR’ (o mesmo dos anteriores formadado para o bug do milenio)

    HORA: ‘HH’ (Hora no formato americano), ‘HH24′ (Hora no formato 24h)

    MINUTO: ‘MI’

    SEGUNDO: ‘SS’

    Exemplos: select to_char(sysdate, ‘DD/MM/YYYY HH24:MI:SS’) from dual; — formato brasileiro mais comum

    Cálculo com Datas

    O calculo de datas sempre é necessário, saber se já passaram 2 dias de uma determinada data, qual o número de dias que faltam para uma determinada data e vários outros cenários, para isso temos as seguintes funções:

     

    Operação de Soma e Subtração (+ e -)

    Sempre calcula usando o número como dias e o calculo só pode ser feito data + ou – dias. Ficando assim:

    select sysdate – 2 from dual;

    Isso retornará o dia antes de ontem. E sendo + 2 seria o dia depois de amanhã. Ou seja, soma-se ou subtrai-se uma quantidade de dias, esse número poderá ser quebrado, representando horas. Deve-se somente dividir-se 1 por 24 por exemplo para fazer o calculo em horas.

    A única função dessas duas que funciona com 2 datas é a de subtração, que retornara a diferença em numero de dias.

    Operação de Adição de meses

    Utiliza-se o comando ADD_MONTHS, usando dessa forma:

    select ADD_MONTHS(sysdate, 2) from dual;

    Onde o primeiro parametro é a data e o segundo a quantidade de meses que se quer adicionar.

    NOTA: Se é o ultimo dia do mes de janeiro, por exemplo, somando-se um mes, vai para o ultimo dia do mes de fevereiro.

    Descobrir a maior data dentre algumas datas

    O comando para descobrir é o GREATEST e pode-se passar várias datas como parametro, dessa forma:

    select GREATEST(sysdate, sysdate-1, sysdate+3, sysdate+10, sysdate-3) from dual;

    Descobrir a menor data dentre algumas datas

    O procedimento para descorbrir é o LEAST e pode-se passar várias datas como parametro, dessa forma:

    select LEAST(sysdate, sysdate-1, sysdate+3, sysdate+10, sysdate-3) from dual;

    Retorna o último dia de um mês

    A função que diz o ultimo dia de um mês é LAST_DAY, passado como parametro uma data dentro do mês do qual quer se saber o ultimo dia.

    select LAST_DAY(sysdate) from dual;

    Calcula a quantidade de meses entres 2 datas

    A função MONTHS_BETWEEN irá retornar a quantidade de meses entre duas datas, mesmo que não dê um mes inteiro a função retornara um número quebrado relativo a esse período.

    select MONTHS_BETWEEN(sysdate-10, sysdate+30) from dual;

    Retorna a data para o próximo dia da semana

    A função NEXT_DAY retorna para uma determinada data, o próximo dia da semana definido no segundo parametro, dessa forma:

    select NEXT_DAY(sysdate, ‘FRI’) from dual;

    Dessa forma retornara a próxima sexta-feira.

    Ficam essas dicas então para quem quiser usar datas no Oracle, é claro que com essas funções você pode criar muitas outras, quem quiser ajuda com alguma necessidade, é só perguntar.

  • Dicas rápidas para tunning (performance) em queries do Oracle
  • Como listar os locks no Oracle
  • 3 de Setembro – Dia do Biólogo
  • Novo design para Black Berry – Kickstart
  • Telefones celulares podem ter sua memória duplicada por software
  • Postado por Meison Almeida On February - 25 - 2010 Desenvolvimento/Programação

    O erro oracle, em código PL-SQL, ORA-01422: exact fetch returns more than request number of rows, é retornado quando em uma única váriavel é tentado retornar mais de um valor, para acertar isso há várias formas dependendo da sua necessidade, vamos a alguns casos:

    1 – Query não deve retornar mais de um registro

    Vamos a uma situação hipotética, temos uma tabela de pedidos e uma tabela de clientes e queremos pegar um número de pedido dele, para isso usamos a seguinte query:

    select id_pedido
    into vID_Pedido
    from pedido p, cliente c
    where c.nome = 'MEISON'
    and c.id_cliente = p.id_cliente;

    Se o cliente tiver feito somente um pedido, essa query retornará só uma linha, mas se ele já for um cliente que está pedindo pela segunda ou mais vez será retornado mais de uma linha o que retornará o erro em questão, pois tentará jogar para a variavel vID_Pedido mais de um valor, o que não é possível. Para corrigir se a regra permitir é só pegar uma linha, por exemplo o ultimo pedido, ficando dessa forma:

    select id_pedido
    into vID_Pedido
    from pedido p, cliente c
    where c.nome = 'MEISON'
    and c.id_cliente = p.id_cliente
    and rownum=1
    order by id_pedido desc;

    O rownum=1 restringe a só uma linha, mas lembrando que sem o order by, ele pega a primeira linha que trouxer do banco. O order by irá garantir que seja a ultima linha criada.
    2 – Query pode retornar mais de um registro

    Tendo como base o primeiro exemplo, porém precisando pegar todos os pedidos desse cliente, o que deve ser feito é tratar cada um deles individualmente, eu utilizaria o loop, ficando assim:

    for vAux in (select id_pedido from pedido where id_cliente = 1)
    loop
    --Procedimento para tratar vAux.id_pedido
    end loop;

    Dessa forma não é dado o erro ORA-01422 e trata-se da maneira certa cada um dos pedidos.

    3 – Query não deve retornar mais de uma linha, erro de cadastro

    Isso é causado quando o sistema deveria inserir somente uma linha e por algum erro, inseriu mais de uma, provocando um erro conceitual. É claro que nesse caso deve-se corrigir a origem que é a inserção erronea de mais de uma linha, mas pode-se tratar também no destino, vamos utilizar a mesma query, ela deveria tratar os erros e ficaria dessa forma:

    begin
    select id_pedido
    into vID_pedido
    from pedido
    where id_cliente = 1;
    exception
    when too_many_rows then
    raise_application_error(-20000,'Erro na tabela pedido, mais linhas para o cliente do que permitido.');
    end;

    Dessa forma abordamos alguns cenários que podemos sanar esse problema. Caso você tenha algum outro problema, comente poderemos fazer outro artigo para solucionar seu problema.

  • Oracle PL/SQL ORA-00947 Not Enough Values
  • Acidente vôo Tam 3054 – Novamente procurando culpados? E solução procura-se?
  • Piada – Sempre o Joãozinho
  • Lavrador tenta falar com Lula e é impedido
  • Letra da Música – Brinquedo Torto – Desconcerto – Pitty
  • Postado por Meison Almeida On February - 19 - 2010 Desenvolvimento/Programação

    No dia 19 de Fevereiro comemora-se o “Dia do Esportista”.
    O esporte é um aliado da saúde em qualquer idade, ele ajuda no crescimento físico, amadurecimento emocional (aprender a lidar com as frustrações), na formação moral (aprender a jogar de acordo com as regras), na socialização (aprender a fazer amigos e espírito de equipe ) e no desenvolvimento da inteligência.
    Quanto antes a pessoa começar a se exercitar, melhor!

  • No related posts
  • Postado por Deise Gomes On February - 18 - 2010 Curiosidades

    Caiu hoje em São Paulo, próximo a marginal o Helicoptero Aguia Dourada da Record, inclusive há imagens em vídeo do acidente. Pelo que parece houve alguma pane que fez com que o piloto aproximasse para um pouso de emergencia e rodopiando sem controle se chocou no chão do joquei.

    O piloto, por informações dadas, parece ter morrido e os outros passageiros estão no hospital.

    Para ver as fotos e mais informações é só clicar aqui.

  • Fotos inéditas do acidente de Diana são liberadas pela Justiça Britanica
  • Edir Macedo – Universal, a briga entre Rede Globo e Record continua
  • Corinthians faz Globo cair para a segunda
  • Acidente vôo Tam 3054 – Novamente procurando culpados? E solução procura-se?
  • Quer ficar bem na foto do orkut? Veja o que os caras podem fazer
  • Postado por Meison Almeida On February - 10 - 2010 Notícias

    Parece que esse tumulto do Enem não acabará tão cedo, algo muito bom (pelo menos para alguns) deve estar acontecendo, pois desde o começo da realização das provas foi embolado. Primeiro foi roubada a prova, depois demorou para algumas faculdades aderirem e agora parece que pode ser cancelado para todos.

    O motivo? O ministério publico federal de Santa Catarina quer uma liminar para suspender a validação do Enem, pois recebeu denuncias anonimas sugerindo imparcialidade, pois algumas pessoas não viram a desidentificação das provas o que consiste em os corretores avaliarem identificando a pessoa, podendo tornar o processo de correção pessoal e assim sendo, dando alguns privilégios.

    Caso isso seja aceito, não poderá por ninguém ser aceito as inscrições a faculdades com os resultados do Enem e então mais uma vez atrapalhando os alunos que gostariam de ingressar na faculdade.

    Se quiserem saber mais informações sobre o caso ou sobre os resultados existem alguns artigos que postamos sobre o caso:

    Resultado do Enem

    Baixe as provas canceladas do Enem

    Enem reabre inscrições, CPF não será mais obrigatório determina Justiça

  • Jogo das galaxias para ajudar no Enem
  • Notas do Enem 2007
  • Baixe as provas canceladas do Enem
  • Enem reabre inscrições, CPF não será mais obrigatório determina Justiça
  • Resultado do Enem
  • Postado por Meison Almeida On January - 29 - 2010 Notícias

    Na noite desta quarta-feria o Mec já divulgou o resultado do Examen Nacional do Ensino Médio (Enem).
    E a partir desta sexta-feira (29/01) os estudantes já podem se candidatar para as vagas ofercidas em por 51 instituições de ensino superior.
    Para ver seus resultados é só consultar pelo site do Enem (http://sistemasenem2.inep.gov.br/Enem2009/)

    Para ver o site onde poderão selecionar o curso que irão desejar fazer, é só acessar, http://sisu.mec.gov.br/, lembrando-se apenas que o site está disponível agora, mas a seleção só será possível fazer na sexta-feira.

    Serão três etapas, para conhece-las melhor veja a notícia completa aqui.

  • Enem pode ser cancelado/suspenso
  • Prouni 2010
  • Notas do Enem 2007
  • Jogo das galaxias para ajudar no Enem
  • Baixe as provas canceladas do Enem
  • Postado por Deise Gomes On January - 28 - 2010 Notícias

    Inscreva-se aqui

    TAG CLOUD

    VIDEO

    Enter the video embed code here. Remember to change the size to 310 x 250 in the embed code.