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.