-- =============================================================================
-- Script: add_wra_wdat_id.sql
-- Objetivo: Adicionar coluna WRA_WDAT_ID em WEB_RESULTADO_AUDITORIA para FK
--           direta com WEB_DET_ATENDIMENTO (melhor performance e joins simples).
-- Executar em todos os clientes (ajustar schema UNIOD se necessário).
-- =============================================================================

-- 1) Adicionar a coluna (nullable para permitir backfill e inserts antigos)
ALTER TABLE uniod.web_resultado_auditoria
ADD wra_wdat_id NUMBER(10) NULL;

-- 2) Comentário na coluna (opcional)
COMMENT ON COLUMN uniod.web_resultado_auditoria.wra_wdat_id IS 'FK para web_det_atendimento.wdat_id (preenchido por trigger)';

-- 3) Backfill: preencher registros existentes (compatível Oracle 11g+)
UPDATE uniod.web_resultado_auditoria ra
   SET ra.wra_wdat_id = (
         SELECT d.wdat_id
           FROM uniod.web_det_atendimento d
          WHERE d.wdat_codatend = ra.wra_atendimento
            AND d.wdat_seq = ra.wra_sequencia
            AND ROWNUM = 1
       )
 WHERE ra.wra_wdat_id IS NULL
   AND ra.wra_atendimento IS NOT NULL
   AND ra.wra_sequencia IS NOT NULL;

COMMIT;

-- 4) Índice para joins e FK
CREATE INDEX uniod.idx_wra_wdat_id ON uniod.web_resultado_auditoria (wra_wdat_id);

-- 5) Trigger: manter WRA_WDAT_ID apenas no INSERT
CREATE OR REPLACE TRIGGER uniod.trg_wra_set_wdat_id
   BEFORE INSERT
   ON uniod.web_resultado_auditoria
   FOR EACH ROW
BEGIN
   IF :NEW.wra_atendimento IS NOT NULL AND :NEW.wra_sequencia IS NOT NULL THEN
      SELECT wdat_id
        INTO :NEW.wra_wdat_id
        FROM uniod.web_det_atendimento d
       WHERE d.wdat_codatend = :NEW.wra_atendimento
         AND d.wdat_seq = :NEW.wra_sequencia
         AND ROWNUM = 1;
   ELSE
      :NEW.wra_wdat_id := NULL;
   END IF;
EXCEPTION
   WHEN NO_DATA_FOUND THEN
      :NEW.wra_wdat_id := NULL;
END;
/

-- 6) (Opcional) FK para integridade referencial
-- ALTER TABLE uniod.web_resultado_auditoria
-- ADD CONSTRAINT fk_wra_wdat
-- FOREIGN KEY (wra_wdat_id) REFERENCES uniod.web_det_atendimento (wdat_id);

-- 7) (Opcional) NOT NULL após validar que todos os registros têm valor
-- ALTER TABLE uniod.web_resultado_auditoria MODIFY wra_wdat_id NOT NULL;
