ストアドプロシージャでクエリを動的に作成して実行する必要があります。
2つのテーブルusersとuser_updatesがあります。
従業員テーブルにはemp_id, username, division, product, region, title etc.
Employee_updatesには次のような列がありますemp_id, effective_date, column_name, new_value etc.
基本的にこれが私がやりたいことです。
特定の発効日のuser_udatesテーブルに更新があるすべての従業員を取得します。
各従業員をループします。
指定された発効日の各従業員のすべての更新を取得します。従業員は、employee_updatesテーブルに1つまたは複数の更新がある場合があります。
次のような更新に基づいて動的な「UPDATE」クエリを作成します。
update employee set col1 = new_val_1, col2 = new_val_2 where emp_id = ?
これは私がこれまでにしたことです
create or replace
PROCEDURE SP_RUN_EMPLOYEE_UPDATES
(
IN_DATE IN DATE
)
IS
update_sql varchar2(225);
employee_id BI_EMPLOYEE_UPDATE.employee_id%TYPE;
CURSOR employees
IS SELECT distinct(employee_id)
FROM BI_EMPLOYEE_UPDATE
WHERE EFFECTIVE_DATE = to_date(IN_DATE,'dd-mm-yy')
AND EXECUTED = 'N' AND ACTIVITY_ID = '0'
;
CURSOR e_updates
IS SELECT *
FROM BI_EMPLOYEE_UPDATE
WHERE EFFECTIVE_DATE = to_date(IN_DATE,'dd-mm-yy')
AND EXECUTED = 'N'
AND ACTIVITY_ID = '0'
and employee_id = employee_id ;
BEGIN
OPEN employees;
LOOP
FETCH employees into employee_id;
EXIT WHEN employees%NOTFOUND;
FOR e_update in e_updates
update_sql := 'UPDATE BI_EMPLOYEE SET ';
LOOP
-- create dynam,ic update statment
UPDATE BI_EMPLOYEE_UPDATE
SET EXECUTED = 'Y'
WHERE EMPLOYEE_UPDATE_ID = e_update.EMPLOYEE_UPDATE_ID ;
END LOOP;
-- run dynamic sql
END LOOP;
CLOSE employees;
END;
助けてください。