Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Stored procedure to insert and update a table and to maintain history(SCD TYPE2)

JV123Oct 5 2015 — edited Oct 5 2015

2Hi,

I have source table called  XXRM_RISKS. And I need to insert data from  XXRM_RISKS table to XXRM_RISK_DIM for all new records. as shown below as an example.

  TABLE NAME =XXRM_RISKS

Risk_idACI_IMPACTCREATED_DTLAST_UPD_DATE
1510-JUNE-201210-JUNE_2012
2815-OCT-201415-OCT-2014
3924-MAY-201524-MAY-2015
4211-SEPT-201511-SEPT-2015

I'm trying to write stored procedure to load data from above table. surrogate key is unique identifier and it is concatenation of from dt and risk id.  to_dt is end date for each risk id. and from_dt is same as created_dt.

TABLE NAME =XXRM_RISK_DIM

SURROGATE_KEYRISK_IDACI_IMPACTFROM_DTTO_DT
1007201211510-JUNE-201231-DEC-9999
1510201422815-OCT-201431-DEC-9999
2405201533924-MAY-201531-DEC-9999
1109201544211-SEPT-201531-DEC-9999

If any risk id is updated in  XXRM_RISKS as shown below

Risk_idACI_IMPACTCREATED_DTLAST_UPD_DATE
4729-SEPT-201529-SEPT-2015

then target table data should be update like shown below.

SURROGATE_KEYRISK_IDACI_IMPACTFROM_DTTO_DT
1007201211510-JUNE-201231-DEC-9999
1510201422815-OCT-201431-DEC-9999
2405201533924-MAY-201531-DEC-9999
1109201544211-SEPT-201528-SEPT-2015
2909201544729-SEPT-201531-DEC-9999

below is the incomplete stored procedure and i'm still working on it. I need help for the update statement on target table. appreciate you for your help.

CREATE OR REPLACE PROCEDURE SP_RISK
AS
BEGIN
INSERT INTO XXRM_RISK_DIM
SELECT TO_NUMBER( R.RISK_ID
  || TO_CHAR(R.CREATION_DATE,'DDMMYYYY')) SURROGATE_KEY,
  R.RISK_ID,
  R.ACI_IMPACT,
  R.ACI_CRITERIA,
  R.CREATION_DATE FROM_DT,
  '31-DEC-9999' AS TO_DT,
  1 VERSION
FROM XXRM_RISKS R

WHERE  NOT EXISTS ( SELECT D.SURROGATE_KEY,
  D.RISK_ID,
  D.ACI_IMPACT,
  D.ACI_CRITERIA,
  D.FROM_DT,
  D.TO_DT,
D.VERSION
FROM XXRM_RISK_DIM D)
END;
COMMIT;

BEGIN

For i in (SELECT R.RISK_ID, R.LAST_UPDATE_DATE

FROM XXRM_RISKS R,

  XXRM_RISK_DIM D

WHERE R.RISK_ID         =D.RISK_ID

AND TO_CHAR(R.LAST_UPDATE_DATE,'DD-MON-YYYY')= TO_CHAR(SYSDATE,'DD-MON-YYYY')

AND R.LAST_UPDATE_DATE IS NOT NULL)

LOOP

Update XXRM_RISK_DIM C set TO_DT = i.LAST_UPDATE_DATE where C.RISK_ID = i.RISK_ID;

END LOOP;

END;


)
END;
COMMIT;

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Nov 2 2015
Added on Oct 5 2015
15 comments
3,108 views