CREATE TABLE e_tab (
e_id NUMBER(10),
eligible VARCHAR2(30),
assigned_date TIMESTAMP
);
INSERT INTO e_tab VALUES(1,'Y',null);
INSERT INTO e_tab VALUES(2,'Y',null);
INSERT INTO e_tab VALUES(3,null,null);
SET SERVEROUTPUT ON;
DECLARE
lv_flag NUMBER(10);
BEGIN
SELECT
COUNT(1)
INTO lv_flag
FROM
e_tab
WHERE
assigned_date != sysdate;
IF lv_flag < 1 THEN
UPDATE e_tab
SET
assigned_date = current_timestamp
WHERE
eligible = 'Y';
END IF;
COMMIT;
END;
I have a table e_tab that I need to update based on the eligible column. If eligible column is Y then I need to update assigned_date column to current date and this will not happen frequently. Say for 2 E_ID that is 1 and 2 eligible column is Y so I have updated assigned_date column to today's date but for the third e_id i.e 3 that will be updated say after one day and will update eligible column to Y. Then, in this case, it should only update the third e_id to tomorrow's date and the previous one will be as it is.
Explanation example :
I need only those records to be updated when eligible a flag is changing to Y. Let's assume I am updating eligible column of e_id 3 on 3rd Feb 2022. Then in this case for e_id 1 and 2 that will show as 2nd Feb only but on 3rd Feb I have changed the flag to Y for e_id 3. So, only e_id 3 should have 3rd Feb and e_id 1 & 2 will have 2nd Feb only
Expected output:
+------+----------+-------------------------------+
| E_ID | ELIGIBLE | ASSIGNED_DATE |
+------+----------+-------------------------------+
| 1 | Y | 02-02-22 3:53:46.449000000 PM |
| 2 | Y | 02-02-22 3:53:46.449000000 PM |
| 3 | Y | 03-02-22 3:53:46.449000000 AM |
+------+----------+-------------------------------+
Will my code work for this scenario? And also if a few more e_id got added later then the same should happen for all the e_id
I have also asked this question on stackoverflow.