รับทำเว็บไซต์ครบวงจร
เลือกภาษา Thai English     facebook


ติดต่อทำเว็บไซต์ โทร : O89-l79-O7l4 (ทุกวัน 24 ชั่วโมง)

รายการหลัก



บทความ


Page Ranking Tool

ทริกเกอร์คืออะไร? What is trigger?


สอน SQL Server
> ทริกเกอร์คืออะไร? What is trigger?


ทริกเกอร์คืออะไร?

ทริกเกอร์เป็นโครงสร้าง PL / SQL block ซึ่งเป็นเชื้อเพลิงเมื่องบ dml เช่นแทรก, ลบ, ปรับปรุงจะดำเนินการในตารางฐานข้อมูล                 ทริกเกอร์จะถูกเรียกโดยอัตโนมัติเมื่อคำสั่ง dml ที่เกี่ยวข้องจะดำเนินการ


ไวยากรณ์สำหรับการสร้าง Trigger

 CREATE [OR REPLACE] trigger_name TRIGGER 
 {ก่อน | หลังจาก | แทน} 
 {INSERT [OR] | UPDATE [OR] | ลบ} 
 [ของ col_name] 
 ON table_name 
 [อ้างอิงเก่าเป็นใหม่เป็น o n] 
 [สำหรับแต่ละแถว] 
 WHEN (เงื่อนไข)  
 BEGIN 
   งบ SQL ---  
 END; 


  • CREATE [OR REPLACE] trigger_name TRIGGER - ประโยคนี้สร้างทริกเกอร์ที่มีชื่อที่กำหนดหรือเขียนทับไกอยู่ด้วยชื่อเดียวกัน
  • {ก่อน | หลังจาก | แทน} - ข้อนี้แสดงให้เห็นในสิ่งที่เวลาควรเรียกรับยิง คือตัวอย่างเช่น: ก่อนหรือหลังการปรับปรุงตาราง แทนการใช้ในการสร้างทริกเกอร์ในมุมมอง ก่อนและหลังการไม่สามารถใช้ในการสร้างทริกเกอร์ในมุมมอง
  • {INSERT [OR] | UPDATE [OR] | ลบ} - ข้อนี้กำหนดเหตุการณ์วิกฤติ มากกว่าหนึ่งเหตุการณ์วิกฤติสามารถใช้ร่วมกันแยกจากกันโดยหรือคำหลัก ทริกเกอร์ได้รับเชื้อเพลิงที่ทุกเหตุการณ์วิกฤติที่ระบุ
  • [ของ col_name] - ประโยคนี้ถูกนำมาใช้กับการปรับปรุงการเรียก ประโยคนี้จะใช้เมื่อคุณต้องการที่จะเรียกเหตุการณ์เฉพาะเมื่อคอลัมน์เฉพาะมีการปรับปรุง
  • CREATE [OR REPLACE] trigger_name TRIGGER - ประโยคนี้สร้างทริกเกอร์ที่มีชื่อที่กำหนดหรือเขียนทับไกอยู่ด้วยชื่อเดียวกัน
  • [เปิด table_name] - ข้อนี้จะระบุชื่อของตารางหรือมุมมองที่ทำให้มีการเชื่อมโยง
  • [อ้างอิงเก่าเป็นใหม่เป็น o n] - ประโยคนี้จะใช้ในการอ้างอิงค่าเก่าและใหม่ของข้อมูลที่มีการเปลี่ยนแปลง โดยปกติแล้วคุณอ้างอิงค่าเป็น: old.column_name หรือ: new.column_name ชื่ออ้างอิงนอกจากนี้ยังสามารถเปลี่ยนจากเก่า (หรือใหม่) จะมีชื่อที่ผู้ใช้กำหนดอื่น ๆ คุณไม่สามารถอ้างอิงค่าเก่าเมื่อแทรกระเบียนหรือค่าใหม่เมื่อมีการลบบันทึกเพราะพวกเขาไม่อยู่
  • [สำหรับแต่ละแถว] - ประโยคนี้ถูกนำมาใช้เพื่อตรวจสอบว่าการเรียกต้องยิงเมื่อแต่ละแถวได้รับผลกระทบ (เช่น Trigger ระดับแถว) หรือเพียงแค่ครั้งเดียวเมื่อคำสั่ง SQL ทั้งหมดจะถูกดำเนินการ (Trigger ระดับ iestatement)
  • WHEN (เงื่อนไข) - ประโยคนี้จะใช้ได้เฉพาะสำหรับระดับแถวเรียก ทำให้มีการยิงเพียงสำหรับแถวที่ตรงตามเงื่อนไขที่ระบุไว้

ตัวอย่างเช่น: ราคาของผลิตภัณฑ์เปลี่ยนแปลงอย่างต่อเนื่อง มันเป็นสิ่งสำคัญที่จะรักษาประวัติศาสตร์ของราคาของผลิตภัณฑ์

เราสามารถสร้างทริกเกอร์เพื่อปรับปรุงตาราง 'product_price_history' เมื่อราคาของสินค้าที่มีการปรับปรุงใน 'ผลิตภัณฑ์' ตาราง

1) สร้าง 'ผลิตภัณฑ์' ตารางและตาราง 'product_price_history'

สร้าง product_price_history ตาราง 
(จำนวน product_id (5), 
product_name varchar2 (32), 
supplier_name varchar2 (32), 
จำนวน unit_price (7,2)); 

สร้างผลิตภัณฑ์ตาราง 
(จำนวน product_id (5), 
product_name varchar2 (32), 
supplier_name varchar2 (32), 
จำนวน unit_price (7,2)); 

2) สร้าง price_history_trigger และรันมัน

สร้างหรือเปลี่ยน price_history_trigger TRIGGER 
ก่อนที่จะปรับปรุงของ unit_price 
เกี่ยวกับสินค้า 
สำหรับแต่ละแถว 
BEGIN 
INSERT INTO product_price_history 
VALUES 
(: old.product_id, 
 : old.product_name, 
 : old.supplier_name, 
 : old.unit_price); 
END; 
/ 

3) ช่วยให้ปรับปรุงราคาของผลิตภัณฑ์

การปรับปรุงผลิตภัณฑ์ unit_price SET = 800 WHERE PRODUCT_ID = 100

เมื่อแบบสอบถามแบบใช้ปรับปรุงดังกล่าวข้างต้นจะถูกดำเนินการเรียกไฟและการปรับปรุง 'product_price_history' ตาราง

4)ถ้าย้อนกลับคุณทำธุรกรรมก่อน committing ไปยังฐานข้อมูลข้อมูลที่ใส่ลงไปในตารางจะรีดยังกลับ

ประเภทของ PL / SQL ทริกเกอร์

มีสองประเภทของทริกเกอร์บนพื้นฐานของระดับที่มันจะถูกเรียกเป็น
1) เรียกระดับแถว - เหตุการณ์จะถูกเรียกแถว upated แต่ละแทรกหรือลบ 
2) เรียกระดับคำชี้แจง - เหตุการณ์จะถูกเรียกสำหรับคำสั่ง SQL แต่ละดำเนินการ 

PL / SQL ลำดับชั้นการดำเนินการประมูล

ลำดับชั้นต่อไปเป็นไปตามเมื่อเรียกเป็นเชื้อเพลิง
1) ก่อนเรียกคำสั่งยิงคนแรก
2) ต่อไปก่อนที่ไฟไหม้แถวเรียกระดับหนึ่งสำหรับแต่ละแถวได้รับผลกระทบ 
3) แล้วเรียกหลังระดับแถวยิงครั้งเดียวสำหรับแถวได้รับผลกระทบ เหตุการณ์นี้จะสลับกันไปมาระหว่างก่อนและหลังระดับแถวเรียก
4) ในที่สุดคำสั่งเรียกหลังจากที่ระดับไฟ

ตัวอย่างเช่น: Let 's สร้าง' product_check 'ตารางซึ่งเราสามารถใช้ในการเก็บข้อความเมื่อทริกเกอร์ถูกยิง

สร้างผลิตภัณฑ์ตาราง
(ข้อความ varchar2 (50), 
 จำนวน Current_Date (32)
);

ลองสร้างคำสั่งก่อนและหลังและระดับแถวเรียกสำหรับตารางผลิตภัณฑ์

1) ก่อนที่จะปรับปรุงระดับคำชี้แจง: ทริกเกอร์นี้จะแทรกบันทึกลงใน 'product_check' ตารางก่อนที่คำสั่ง UPDATE SQL จะถูกดำเนินการในระดับคำสั่ง

สร้างหรือเปลี่ยน Before_Update_Stat_product TRIGGER 
ก่อน 
ปรับปรุงผลิตภัณฑ์ 
เริ่ม 
INSERT INTO product_check 
ค่า ('ก่อนปรับปรุงระดับคำสั่ง', sysdate); 
END; 
/ 

2) ก่อนที่จะปรับปรุงระดับแถว: ทริกเกอร์นี้จะแทรกบันทึกลงใน 'product_check' ตารางก่อนที่แต่ละแถวมีการปรับปรุง

 สร้างหรือเปลี่ยน Before_Upddate_Row_product TRIGGER 
 ก่อน 
 ปรับปรุงผลิตภัณฑ์ 
 สำหรับแต่ละแถว 
 BEGIN 
 INSERT INTO product_check 
 ค่า ('ก่อนระดับแถว update', sysdate); 
 END; 
 / 

3) หลังจากการปรับปรุงระดับคำชี้แจง: ทริกเกอร์นี้จะแทรกบันทึกลงใน 'product_check' ตารางหลังจากคำสั่ง UPDATE SQL จะถูกดำเนินการในระดับคำสั่ง

 สร้างหรือเปลี่ยน After_Update_Stat_product TRIGGER 
 หลัง 
 ปรับปรุงผลิตภัณฑ์ 
 BEGIN 
 INSERT INTO product_check 
 ค่า ('หลังจากการปรับปรุงระดับคำสั่ง,', sysdate); 
 end; 
 / 

4) หลังจากการอัพเดทระดับแถว: ทริกเกอร์นี้จะแทรกบันทึกลงใน 'product_check' ตารางหลังจากแต่ละแถวมีการปรับปรุง

 สร้างหรือเปลี่ยน After_Update_Row_product TRIGGER 
 หลัง  
 แทรกบนผลิตภัณฑ์ 
 สำหรับแต่ละแถว 
 BEGIN 
 INSERT INTO product_check 
 ค่า ('หลังจากการปรับปรุงระดับแถว,', sysdate); 
 END; 
 / 

ตอนนี้ให้ดำเนินการปรับปรุงคำที่ใช้ในผลิตภัณฑ์ตาราง

 การปรับปรุงผลิตภัณฑ์ตลาดหลักทรัพย์ unit_price = 800  
 PRODUCT_ID WHERE ใน (100,101); 

ช่วยให้ตรวจสอบข้อมูลใน 'product_check' ตารางเพื่อดูคำสั่งที่เรียกจะยิง

 SELECT * FROM product_check; 

เอาท์พุท:

Mesage Current_Date

-------------------------------------------------- ----------

ก่อนที่จะปรับปรุงระดับคำสั่ง, 26-Nov-2008
ก่อนที่ระดับการปรับปรุงแถว, 26-Nov-2008
หลังจากที่ระดับการปรับปรุงแถว 26-Nov-2008
ก่อนที่ระดับการปรับปรุงแถว 26-Nov-2008
หลังจากที่ระดับการปรับปรุงแถว, 26-Nov-2008
หลังจากการปรับปรุงระดับคำสั่ง, 26-Nov-2008

ผลข้างต้นแสดงให้เห็นก่อนที่จะปรับปรุง 'และ' หลังจากการปรับปรุงของเหตุการณ์ระดับแถวได้เกิดขึ้นเป็นครั้งที่สองตั้งแต่สองระเบียนได้รับการปรับปรุง   แต่ก่อนที่จะปรับปรุง 'และ' หลังจากการปรับปรุงของเหตุการณ์ระดับคำสั่งถูกไล่ออกเพียงครั้งเดียวต่อคำสั่ง SQL

กฎระเบียบดังกล่าวใช้เหมือนกันสำหรับการแทรกและลบงบ

วิธีการทราบข้อมูลเกี่ยวกับทริกเกอร์

เราสามารถใช้ 'USER_TRIGGERS' ดูพจนานุกรมข้อมูลเพื่อให้ได้ข้อมูลเกี่ยวกับการเรียกใด ๆ

คำสั่งด้านล่างแสดงให้เห็นถึงโครงสร้างของ 'USER_TRIGGERS มุมมอง

 DESC USER_TRIGGERS; 

ชื่อ ; ประเภท

-------------------------------------------------- ------

TRIGGER_NAME VARCHAR2 (30)
TRIGGER_TYPE VARCHAR2 (16)
TRIGGER_EVENT VARCHAR2 (75)
TABLE_OWNER VARCHAR2 (30)
BASE_OBJECT_TYPE VARCHAR2 (16)
TABLE_NAME VARCHAR2 (30)
COLUMN_NAME VARCHAR2 (4000)
REFERENCING_NAMES VARCHAR2 (128)
WHEN_CLAUSE VARCHAR2 (4000)
สถานภาพ ; VARCHAR2 (8)
รายละเอียด VARCHAR2 (4000)
ACTION_TYPE VARCHAR2 (11)
ยาว TRIGGER_BODY

มุมมองนี้เก็บข้อมูลเกี่ยวกับส่วนหัวและลำตัวของทริกเกอร์

SELECT * FROM WHERE user_triggers trigger_name = 'Before_Update_Stat_product'; 

แบบสอบถาม sql ข้างต้นให้หัวและร่างกายของ 'Before_Update_Stat_product' เรียก

คุณสามารถวางไกใช้คำสั่งต่อไป

DROP trigger_name TRIGGER;

Cascading ไซคลิกในการเรียก

นี่คือสถานการณ์ที่ไม่พึงประสงค์ที่มากกว่าหนึ่งเรียกเข้าไปในวง จำกัด ขณะที่การสร้างทริกเกอร์ที่เราควรตรวจสอบให้แน่ใจ situtation ดังกล่าวไม่ได้อยู่

ตัวอย่างด้านล่างแสดงให้เห็นว่า Trigger ที่สามารถใส่ลงในวงจรซ้อน
ลองพิจารณาว่าเรามีสองตาราง 'abc' และ 'xyz' สองเรียกถูกสร้างขึ้น
1) เรียก INSERT, triggerA ในประเด็นตาราง 'abc' UPDATE บนโต๊ะ 'xyz'
2) เรียก UPDATE, triggerB ในประเด็นตาราง 'xyz' INSERT บนโต๊ะ 'abc'

ในสถานการณ์ดังกล่าวเมื่อมีแถวแทรกในตาราง 'abc', triggerA ไฟและจะปรับปรุงตาราง 'xyz' 
เมื่อตาราง 'xyz' มีการปรับปรุงไฟ triggerB และจะแทรกแถวในตาราง 'abc'
นี้สถานการณ์วงจรอย่างต่อเนื่องและจะเข้าสู่ห่วงอนันต์ซึ่งจะผิดพลาดฐานข้อมูล



Short URL click!
<< กลับคืน : เข้าชม 11,717 ครั้ง : ขึ้นไปด้านบน

รับทำเว็บไซต์ รับสร้างเว็บไซต์ รับออกแบบเว็บ รับเขียนเว็บ รับสอนทำเว็บ รับเช่า hosting รับเช่าพื้นที่เว็บไซต์ จดชื่อเว็บ รับโปรโมทเว็บไซต์ รับดูแลเว็บ SiteMap
สปริงเกอร์http://www.xn--22c2c4blb9n.xn--o3cw4h/