Ir para conteúdo
Fórum Script Brasil
  • 0

Problema com Procedure


Shinka

Pergunta

Estou tendo algumas complicações quanto ao código que estou criando no ORACLE Database Express Edition. Eu havia feito com parâmetros mas me falaram que não seria necessário, pois o próprio BD iria localizar os campos que estavam sendo utilizado. Ainda estou aprendendo quanto ao uso de Procedures/Triggers/Jobs, por isso acabo ouvindo o conselho amigo.

A idéia é a seguinte. Duas tabelas (OCORRENCIA e HISTORICO), onde a primeira é onde ficam os registros de ocorrencias feitas durante o dia e a histórico mantem registro dos registros de OCORRENCIA a cada 1 hora.

CREATE TABLE OCORRENCIA (
    ID_OCORRENCIA   NUMBER NOT NULL,        -- PK da tabela gerada pela sequence SEQ_OCORRENCIA
    LATITUDE        NUMBER(10, 0) NOT NULL, -- Latitude da ocorrência
    LONGITUDE       NUMBER(10, 0) NOT NULL, -- Longitude da ocorrência
    FOTO            BLOB,                   -- Foto da ocorrência
    COMENTARIO      VARCHAR2(100),          -- Comentário opcional da ocorrência
    DATA            DATE NOT NULL,          -- Data da ocorrência neste formato: dd/mm/aaaa
    HORA            TIMESTAMP NOT NULL,     -- Hora da ocorrência neste formato: hh:mm:ss
    CONFIRMACAO     NUMBER(3,0),            -- Número de confirmações da ocorrência
    FINALIZADO      NUMBER(1,0),            -- Os valores podem ser 0 ou 1, sendo que 1 representa a ocorrência que está finalizada e 0 não finalizada
    TURNO           NUMBER(1,0)             -- Os valores podem ser: 
                                            -- 0: manhã (6h-11h59min59s)
                                            -- 1: tarde (12h-17h59min59s)
                                            -- 2: noite (18h-23h59min59s)
                                            -- 3: madrugada (00h-5h59min59s)
);
CREATE TABLE HISTORICO(
    ID_HISTORICO    NUMBER NOT NULL,    -- PK da tabela gerada automaticamente pela função SEQ_HISTORICO()
    LATITUDE        NUMBER(10, 0) NOT NULL, -- Latitude da ocorrência
    LONGITUDE       NUMBER(10, 0) NOT NULL, -- Longitude da ocorrência
    DATA            DATE NOT NULL,      -- Data da ocorrência neste formato: dd/mm/aaaa
    TURNO           NUMBER(1,0),        -- Os valores podem ser: 
                                        -- 0: manhã (6h-11h59min59s)
                                        -- 1: tarde (12h-17h59min59s)
                                        -- 2: noite (18h-23h59min59s)
                                        -- 3: madrugada (00h-5h59min59s)
    DIA_SEMANA      NUMBER(1,0)         -- Os valores podem ser: 
                                        -- 0: segunda-feira
                                        -- 1: terça-feira
                                        -- 2: quarta-feira
                                        -- 3: quinta-feira
                                        -- 4: sexta-feira
                                        -- 5: sábado
                                        -- 6: domingo
);
Pesquisei quanto a uma forma de atualizar o BD e me falaram sobre JOBS, tentei criar mas não sei se está corrento da forma que fiz.
dbms_job.submit(
    what        => prc_atualiza_ocorrencias,
    next_date   => sysdate + 1/24,      -- Inicia o JOB depois de uma hora
    Interval    => 'sysdate + 1/24');   -- Executa a cada uma hora
O problema que parece estar ocorrendo é na Procedure que criei, ele deve fazer a inserção dos dados de OCORRENCIA em HISTORICO a cada 12 horas ou quando o campo FINALIZADO estiver flegado em OCORRENCIA:
CREATE PROCEDURE prc_atualiza_ocorrencias IS
BEGIN
    -- Insere na tabela HISTORICO registros da tabela OCORRENCIA. Apenas são registrado os dados que tenham passado 12 horas após o cadastro.
    -- Essa mesma linha é deletada da tabela OCORRENCIA
    IF sysdate >= (HORA +  12/24) OR FINALIZADO = 1 THEN
        BEGIN
            INSERT INTO HISTORICO(LATITUDE, LONGITUDE, DATA, TURNO, DIA_SEMANA)
            (SELECT LATITUDE, LONGITUDE, DATA, TURNO, to_char(DATA, 'D')
            FROM OCORRENCIA
            WHERE DATA < SYSDATE - 2/24);

            DELETE FROM OCORRENCIA
            WHERE DATA < SYSDATE - 2/24;
        END;
    END IF;
    --
END;

Será que alguém poderia me dar umas dicas de programação em BD? Atualmente estou trabalhando com PowerBuilder e meu contato com BD no máximo é ao utilizar o SQL Navigator que utilizamos acaba sendo mais para SELECTs, INSERTs e DELETEs. Se alguém tiver um local para baixar o MySQL seria uma boa, não estou me encontrando com esse ORACLE Database Express Edition.

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...