Cada visita ou clique soma 1 numa linha por dia, página, ação, sistema e tipo de aparelho: um MERGE só incrementa o total, sem gravar IP, sessão ou User-Agent. Os valores aceitos ficam nas constraints CHECK da tabela; valor fora da lista gera ORA-02290, que o package descarta sem gravar nem avisar.
on ( d.dia = s.dia
and d.pagina_alias = s.pagina_alias
and d.acao = s.acao
and d.sistema_id = s.sistema_id
and d.dispositivo = s.dispositivo)
when matched then
update set d.total = d.total + 1
when not matched then
insert (dia, pagina_alias, acao, sistema_id, dispositivo, total)
values (s.dia, s.pagina_alias, s.acao, s.sistema_id, s.dispositivo, 1);
exception
when e_fora_do_dominio then
null; -- valor inventado por quem chamou: nao conta e nao avisa
end contar;