Quantcast
Channel: Question and Answer » oracle
Viewing all articles
Browse latest Browse all 717

Can I do update,insert multiple row like this?

$
0
0

I have a base table and a history table. The history table contains 5 extra columns:

  • surrogate key
  • insert_date
  • end_date
  • old_address
  • flag

In the history table I want to record data changes of the base table. If there is any change of a row in the base table then a new row should be inserted to the history table that records this change.
My input data is

student_id name   city    state   mobile
         1 suraj  bhopal  m.p.    9874561230
         2 ravi   pune    mh      9874563210
         3 amit   patna   bihar   9632587410

After this insert my target table would be like this

surr_key student_id name  city   state mobile insert_Date end_date   old_add Flag
       1          1 suraj bhopal m.p.  9874.. 31/06/2015  31/12/9999 bhopal  Y
       2          2 ravi pune    mh    9874.. 31/06/2015  31/12/9999 pune    Y
       3          3 amit patna   bihar 9632.. 31/06/2015  31/12/9999 patna   Y

When inserting a new row into the base table an appropriate row should be inserted into the history table and the insert_date and end_date of this row should be same and flag shoud be set to 'Y'. After updating this row in the base table a new row will be inserted in the history table to reflect the changes made to the row of the base table. The insert_date will be set to the current date (sysdate) and end_date will be set to '31-12-9999' for the new row of the history table and for this row flag is set to 'Y' and the flag of the old row is updated to 'N'.
So the row of the history date that recorded the last change of a row in the base table has the column Flag set to 'Y'. All other rows that recorded changes of this base table row have the Flag set to 'N'.
Something like this-

surr_key student_id name    city   state mobile insert_Date end_date   old_add Flag
       1          1 suraj   bhopal m.p.  9874.. 31/06/2015  31/12/9999 bhopal  N
       2          2 ravi    pune   mh    9874.. 31/06/2015  31/12/9999 pune    Y
       3          3 amit    patna  bihar 9632.. 31/06/2015  31/12/9999 patna   Y
       4          1 pradeep bhopal m.p.  9874.. 31/06/2015  31/12/9999 (null)  Y

If the update is only on the city then the new change should be in city and the previous name of city should be put in old_add column

Like this-

surr_key student_id name    city   state mobile insert_Date end_date   old_add Flag
       1          1 suraj   bhopal m.p.  9874.. 31/06/2015  31/12/9999 bhopal  N
       2          2 ravi    pune   mh    9874.. 31/06/2015  31/12/9999 pune    Y
       3          3 amit    patna  bihar 9632.. 31/06/2015  31/12/9999 patna   Y
       4          1 pradeep bhopal m.p.  9874.. 31/06/2015  31/12/9999 bhopal  Y

If, there is a condition that both address and some other record let say name is updated then for that a new row should be there and old address should be updated.

surr_key student_id   name  city    state   mobile  insert_Date       end_date        old_add       Flag
    1       1         suraj bhopal  m.p.      9874..    31/06/2015      1/09/2015       bhopal          N
    2       1         suraj bhopal  m.p.      9874..    2/09/2015       31/12/9999      indore          Y

Is it possible without using any trigger as I don’t want to use it I just simply want a query. Can anyone help???


Viewing all articles
Browse latest Browse all 717

Trending Articles