Here is the relevant code (the p_providerid variable is used for nothing except to perform a meaningless operation in the Exception section):
BEGIN
-- run insert query to load roster data to work table
insert into wrk_comp_diabetes
(measure, memberlastname, memberfirstname,
memberdob, memberid, providerlastname,
providerfirstname, providerid, medgroup)
select qr.rulename, mp.lname, mp.fname,
m.birthdate, qm.memberid, p.lname,
p.fname, qm.providerid, qm.medgroup
from qrulenames@hprdba qr,
memberpersonal@hprdba mp,
member@hprdba m,
provider@hprdba p,
qmemrule@hprdba qm
where qm.ruleid = qr.ruleid (+)
and qm.memberid = mp.memberid
and qm.memberid = m.memberid
and qm.ruleid = -7
and qm.providerid = p.providerid (+)
order by mp.lname, mp.fname;
COMMIT;
-- create a cursor to step thru the records in the work table, then
-- run a series of updates to fill out the data for each record
DECLARE
CURSOR c_comp_diabetes IS
SELECT *
FROM wrk_comp_diabetes;
--FOR UPDATE OF eyeexamdate, eyedoctor, medispecialty,
-- hba1cdate, hba1cresult,
-- ldldate, ldlresult, diabnephrdate,
-- diabnephrcode, textfieldnotes, reviewername;
v_diabetes_data c_comp_diabetes%rowtype;
BEGIN
OPEN c_comp_diabetes;
FETCH c_comp_diabetes into v_diabetes_data;
WHILE c_comp_diabetes%FOUND LOOP
p_memberid := v_diabetes_data.memberid;
SELECT count(hr.svcdate)
INTO p_rec_count
FROM hr_cm_claims@hprdba hr,
provider@hprdba pr
WHERE hr.memberid = p_memberid
AND hr.providerid = pr.providerid
AND hr.subruleid = 358
AND substr(pr.specialty_desc,1,2) = 'Op';
IF p_rec_count <> 0 THEN
SELECT max(hr.svcdate), min(hr.providerid), min(pr.specialty_desc)
INTO v_eyeexamdate, v_eyedoctor, v_medispecialty
FROM hr_cm_claims@hprdba hr,
provider@hprdba pr
WHERE hr.memberid = p_memberid
AND hr.providerid = pr.providerid
AND hr.subruleid = 358
AND substr(pr.specialty_desc,1,2) = 'Op'
AND hr.svcdate = (SELECT max(hr.svcdate)
FROM hr_cm_claims@hprdba hr,
provider@hprdba pr
WHERE hr.memberid = p_memberid
AND hr.providerid = pr.providerid
AND hr.subruleid = 358
AND substr(pr.specialty_desc,1,2) = 'Op')
GROUP BY hr.svcdate;
END IF;
--***
SELECT count(svcdate)
INTO p_rec_count
FROM hr_cm_claims@hprdba
WHERE memberid = v_diabetes_data.memberid
AND subruleid IN (356, 357);
IF p_rec_count <> 0 THEN
SELECT max(svcdate), min(results)
INTO v_hba1cdate, v_hba1cresult
FROM hr_cm_claims@hprdba
WHERE memberid = p_memberid
AND subruleid IN (356, 357)
AND svcdate = (SELECT max(svcdate)
FROM hr_cm_claims@hprdba
WHERE memberid = p_memberid
AND subruleid IN (356, 357))
GROUP BY svcdate;
END IF;
--***
SELECT count(svcdate)
INTO p_rec_count
FROM hr_cm_claims@hprdba
WHERE memberid = v_diabetes_data.memberid
AND subruleid IN (360, 361)
AND results = (SELECT min(results)
FROM hr_cm_claims@hprdba
WHERE memberid = v_diabetes_data.memberid
AND subruleid IN (360, 361));
IF p_rec_count <> 0 THEN
SELECT max(svcdate), min(results)
INTO v_ldldate, v_ldlresult
FROM hr_cm_claims@hprdba
WHERE memberid = v_diabetes_data.memberid
AND subruleid IN (360, 361)
AND results = (SELECT min(results)
FROM hr_cm_claims@hprdba
WHERE memberid = v_diabetes_data.memberid
AND subruleid IN (360, 361))
GROUP BY results;
END IF;
UPDATE wrk_comp_diabetes
SET eyeexamdate = v_eyeexamdate, eyedoctor = v_eyedoctor,
medispecialty = v_medispecialty,
hba1cdate = v_hba1cdate, hba1cresult = v_hba1cresult,
ldldate = v_ldldate, ldlresult = v_ldlresult
WHERE memberid = v_diabetes_data.memberid
AND providerid = v_diabetes_data.providerid;
FETCH c_comp_diabetes into v_diabetes_data;
COMMIT;
END LOOP;
CLOSE c_comp_diabetes;
COMMIT;
END;
EXCEPTION
WHEN NO_DATA_FOUND THEN
BEGIN
p_providerid := 1;
END;