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.
Question
Shinka
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.
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. 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: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.