Usually, it executes ok but sometimes once or twice in a week, it got hanged or slowdown in Oracle.
Is there a better way to optimize it?
FOR i IN ( SELECT * FROM process_data) LOOP
BEGIN
SELECT employee_plan_id
INTO lc_emp_plan_id
FROM employee
WHERE employeeid = i.emp_id
AND join_year = (
SELECT join_year
FROM employeedata
WHERE employeeid = i.emp_id
AND i.joining_date BETWEEN join_date AND termination_date
);
END;
SELECT employee_plan_type
INTO lc_emp_type
FROM employee_plans
WHERE employee_plan_id = lc_emp_plan_id;
-- Mark failed record if emp_lastname is null
UPDATE process_data
SET
is_failure = 1
WHERE emp_lastname IS NULL
AND emp_plan_type = lc_emp_type;
END LOOP;
Remember
SELECT join_year
FROM employeedata
WHERE employeeid = i.emp_id
AND i.joining_date BETWEEN joining_date AND termination_date;
It will always return 1 record and that is proven.
Here lc_emp_plan_id
is a variable and this for loop executes within procedure?