SET SERVEROUTPUT ON SIZE 100000 DECLARE l_count INTEGER; BEGIN FOR l_rec IN (SELECT created_at AS ts FROM t1 UNION SELECT CASE WHEN outdated_at > SYSDATE THEN SYSDATE ELSE outdated_at END FROM t1) LOOP -- T1 minus T2 dbms_output.put(to_char(l_rec.ts, 'YYYY-MM-DD HH24:MI:SS') || ' (1): '); SELECT COUNT(*) INTO l_count FROM (SELECT OID, c1, c2 FROM t1 WHERE created_at <= l_rec.ts AND outdated_at > l_rec.ts MINUS SELECT OID, c1, c2 FROM t2 AS OF scn timestamp_to_scn(CAST(l_rec.ts AS TIMESTAMP))); IF l_count = 0 THEN dbms_output.put_line('ok'); ELSE dbms_output.put_line('nok, ' || l_count || ' rows found.'); END IF; -- T2 minus T1 dbms_output.put(to_char(l_rec.ts, 'YYYY-MM-DD HH24:MI:SS') || ' (2): '); SELECT COUNT(*) INTO l_count FROM (SELECT OID, c1, c2 FROM t2 AS OF scn timestamp_to_scn(CAST(l_rec.ts AS TIMESTAMP)) MINUS SELECT OID, c1, c2 FROM t1 WHERE created_at <= l_rec.ts AND outdated_at > l_rec.ts); IF l_count = 0 THEN dbms_output.put_line('ok'); ELSE dbms_output.put_line('nok, ' || l_count || ' rows found.'); END IF; END LOOP; END; /