Estou a um tempo tentando fazer no Oracle um código plsql para resolver os cálculos de um sistema para estacionamento rotativo. Eu fiz uma tabela chamada utilização_r e outra chamada valor rotativo, onde vocês podem ver as duas tabelas e os scripts da trigger para gerar a hora da entrada e da função para retornar o valor a pagar abaixo. O que eu queria e que meu código é que eu colocasse valores na tabela de valor_rotativo para poder dar valore diferente de acordo com o tempo de permanência, pois na minha função o valor e dado direto dentro da função, e eu queria que os primeiros cinco minutos não fosse cobrado e a cada meia hora, fosse cobrado o valor estipulado na tabela valor_rotativo, mais não to conseguindo fazer essa transação. Se alguém poder me ajudar, agradeço.
Abraço.
CREATE TABLE "UTILIZACAO_R"
( "IDUTILR" NUMBER,
"IDVROT" NUMBER,
"HORA_ENTRADA" TIMESTAMP (6),
"HORA_SAIDA" TIMESTAMP (6),
"VALOR_PAGO" FLOAT(126),
"PLACA" VARCHAR2(80),
CONSTRAINT "UTILIZACAO_R_PK" PRIMARY KEY ("IDUTILR")
USING INDEX ENABLE
)
/
ALTER TABLE "UTILIZACAO_R" ADD CONSTRAINT "UTILIZACAO_R_ VALOR_ROTATIVO_FK" FOREIGN KEY ("IDVROT")
REFERENCES " VALOR_ROTATIVO" ("IDVROT") ENABLE
/
------------------------x-----------------------------------
CREATE TABLE "VALOR_ROTATIVO"
( "IDVROT" NUMBER,
"VALOR" FLOAT(126),
"DATA_INICIO" DATE,
"DATA_FIM" DATE,
CONSTRAINT "VALOR_ROTATIVO_PK" PRIMARY KEY ("IDVROT")
USING INDEX ENABLE
)
/
---------------------------x--------------------------------
CREATE OR REPLACE TRIGGER "DATAENTRADA"
before insert
ON utilizacao_r
FOR EACH ROW
DECLARE
begin
:new.hora_entrada:= LOCALTIMESTAMP;--SYSDATE;
end;
/
ALTER TRIGGER "DATAENTRADA" ENABLE
/
-------------------------x----------------------------
DECLARE
V_VALOR_PAGO UTILIZACAO_R.VALOR_PAGO%TYPE;
begin
if :P7_HORA_SAIDA is not null and :P7_HORA_ENTRADA is not null then
V_VALOR_PAGO := ROUND(
(
to_date(:P7_HORA_SAIDA,'DD/MM/YYYY HH24:MI:SS') - to_date(:P7_HORA_ENTRADA,'DD/MM/YYYY HH24:MI:SS')
) * 24 * 6,
2);
end if;
--return NVL(V_VALOR_PAGO, 0);
apex_util.set_session_state('P7_VALOR_PAGO', NVL(V_VALOR_PAGO, 0));
end;