ผมติดปัญหาเรื่องอัพเดทข้อมูลโดยใช้ Trigger ครับ คือ
ผมมีตาราง 2 ตาราง(สมมุติว่าชื่อตาราง A กับ B นะครับ)
ตาราง A เอาไว้เก็บข้อมูลเวลาการทำงานของพนักงงานแต่ละคนในแต่ละวัน
---------------------------------------------------
ID | Work_Date | Working_Hours |
---------------------------------------------------
001 | 1/7/2015 | 8 |
002 | 1/7/2015 | 7 |
003 | 1/7/2015 | 8 |
001 | 2/7/2015 | 8 |
002 | 2/7/2015 | 6 |
003 | 2/7/2015 | 7 |
001 | 3/7/2015 | 8 |
002 | 3/7/2015 | 7 |
003 | 3/7/2015 | 4 |
------------------------------------------------------
ตาราง B เอาไว้เก็บข้อมูลเวลาการทำงานและเวลาการทำงานสะสมของพนักงงานแต่ละคนในแต่ละสัปดาห์
--------------------------------------------------------------------------------------------------------------------------------
ID | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday | Total_Working_Hours |
--------------------------------------------------------------------------------------------------------------------------------
001 | 0 | 0 | 8 | 8 | 8 | 0 | 0 | 24 |
002 | 0 | 0 | 7 | 6 | 7 | 0 | 0 | 20 |
003 | 0 | 0 | 8 | 7 | 4 | 0 | 0 | 19 |
-------------------------------------------------------------------------------------------------------------------------------------
ที่คิดไว้คืออยากทำ Trigger ไว้ที่ตาราง A โดยทุกครั้งหลังจากที่ตารางถูก Insert Update Delete ก็ให้ทำการคำนวณค่าในตาราง A มาเก็บไว้ที่ตาราง B
(โดยสร้างเป็น Procedure เพื่อใช้ในการ Update ข้อมูลในตาราง B)
แต่ปัญหาคือผมไม่สามารถใช้ข้อมูลของตาราง A ใน Trigger ดังกล่าวได้เพราะเป็นข้อห้าม ติด Error "ORA-04091"
ผมลองใช้วิธีเพิ่มตารางสำรองขึ้นมาเพื่อเก็บค่า record จากตาราง A ก่อน
แล้วค่อยใช้ Trigger ในตารางสำรองไปเรียก Procedure อีกทอดนึง ก็ใช้งานไม่ได้เหมือนกัน
ไม่ทราบว่าจะสามารถแก้ไขหรือพอจะมีวิธีอื่นใช้แทนกันได้มั๊ยครับ
ถามเกี่ยวกับ Trigger Database ของ Oracle ครับ
ผมมีตาราง 2 ตาราง(สมมุติว่าชื่อตาราง A กับ B นะครับ)
ตาราง A เอาไว้เก็บข้อมูลเวลาการทำงานของพนักงงานแต่ละคนในแต่ละวัน
---------------------------------------------------
ID | Work_Date | Working_Hours |
---------------------------------------------------
001 | 1/7/2015 | 8 |
002 | 1/7/2015 | 7 |
003 | 1/7/2015 | 8 |
001 | 2/7/2015 | 8 |
002 | 2/7/2015 | 6 |
003 | 2/7/2015 | 7 |
001 | 3/7/2015 | 8 |
002 | 3/7/2015 | 7 |
003 | 3/7/2015 | 4 |
------------------------------------------------------
ตาราง B เอาไว้เก็บข้อมูลเวลาการทำงานและเวลาการทำงานสะสมของพนักงงานแต่ละคนในแต่ละสัปดาห์
--------------------------------------------------------------------------------------------------------------------------------
ID | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday | Total_Working_Hours |
--------------------------------------------------------------------------------------------------------------------------------
001 | 0 | 0 | 8 | 8 | 8 | 0 | 0 | 24 |
002 | 0 | 0 | 7 | 6 | 7 | 0 | 0 | 20 |
003 | 0 | 0 | 8 | 7 | 4 | 0 | 0 | 19 |
-------------------------------------------------------------------------------------------------------------------------------------
ที่คิดไว้คืออยากทำ Trigger ไว้ที่ตาราง A โดยทุกครั้งหลังจากที่ตารางถูก Insert Update Delete ก็ให้ทำการคำนวณค่าในตาราง A มาเก็บไว้ที่ตาราง B
(โดยสร้างเป็น Procedure เพื่อใช้ในการ Update ข้อมูลในตาราง B)
แต่ปัญหาคือผมไม่สามารถใช้ข้อมูลของตาราง A ใน Trigger ดังกล่าวได้เพราะเป็นข้อห้าม ติด Error "ORA-04091"
ผมลองใช้วิธีเพิ่มตารางสำรองขึ้นมาเพื่อเก็บค่า record จากตาราง A ก่อน
แล้วค่อยใช้ Trigger ในตารางสำรองไปเรียก Procedure อีกทอดนึง ก็ใช้งานไม่ได้เหมือนกัน
ไม่ทราบว่าจะสามารถแก้ไขหรือพอจะมีวิธีอื่นใช้แทนกันได้มั๊ยครับ