Jump to content
Fórum Script Brasil
  • 0

Problema com Procedure


Shinka

Question

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 to comment
Share on other sites

1 answer to this question

Recommended Posts

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...