Arquivo da categoria: PL/SQL

Como criar um campo autoincremental no Oracle PL/SQL

O Oracle não tem campos auto incrementais, para simular esta funcionalidade é necessário criar “Sequences”:

CREATE SEQUENCE seqFuncionarios
INCREMENT BY 1
START WITH 1
MAXVALUE 99999
NOCACHE
NOCYCLE;

Para utilizar, a cada linha adicionada ele irá aumentar em 1 (INCREMENT BY 1) o valor desta “sequence”.

INSERT INTO FUNCIONARIOS (ID, NOME) VALUES (seqFuncionarios.nextVal; 'João');
INSERT INTO FUNCIONARIOS (ID, NOME) VALUES (seqFuncionarios.nextVal; 'Roberto');

João terá ID igual a 1 (START WITH 1) e Roberto terá o ID igual a 2 (INCREMENT BY 1: 1 + 1 = 2).

ORA-01830: a imagem do formato da data termina antes de converter a string de entrada inteira

ORA-01830: a imagem do formato da data termina antes de converter a string de entrada inteira
01830. 00000 -  "date format picture ends before converting entire input string"
*Cause:    
*Action:

Causa 01: Você deve estar utilizando uma data inválida. Exemplo: 31/06/2016 (Quando o mês em 2016 vai até dia 30);

Como utilizar cursor no PL SQL

Segue abaixo um exemplo básico do uso de cursor na linguagem PL/SQL

DECLARE

  CURSOR Funcionarios IS

      SELECT
        matricula
        nome
      FROM
        funcionario

  registroFuncionario Funcionarios%Rowtype;

BEGIN

     OPEN Funcionarios;

     LOOP
            Fetch Funcionarios Into registroFuncionario;

            EXIT WHEN Funcionarios%NotFound;

              Dbms_Output.Put_Line ('Funcionário: ' || registroFuncionario.matricula || ' - ' || registroFuncionario.nome );

      END LOOP;

      CLOSE Funcionarios;

END;

Como utilizar um campo nomeado (ALIAS) em um GROUP BY em uma Consulta SQL

Por incrível que pareça isso não é possível! Então, se tiver um campo calculado, você terá que colocar a formula (ou case) dentro do “Group by”. Mas existe uma forma de contornar este problema, para isso siga o exemplo abaixo:

SELECT
*
FROM (
SELECT
trunc((months_between(sysdate, to_date('17/02/2015','dd/mm/yyyy')))/12) AS idade
FROM DUAL
)
GROUP BY idade