הימנעות מלולאה אינסופית בטריגרים my sql
-
שלום לכולם
ל SQL SERVER יש מנגנון שיודע לזהות האם עדכון בטבלה הגיע מטריגר של עצמו או מבקשה חיצונית, וזאת על מנת למנוע מצב של לולאה אינסופית כאשר הטריגר מעדכן את אותה הטבלה שעליה הוא חל, וכמו שאומרים הלמדנים על בסיס דברי הרמב"ן המגרש את אשתו על מנת שלא תתקדשי לפלוני שכל דבר שאם הוא יחול הוא לא יחול אז הוא לא חל :lol: :lol: :lol: , אז בישיבה יש שחושבים שזה איזה כוח מאגי שמונע מדברים לחול (לא שאני חושב ככה חלילה :lol: :lol: :lol: ), אבל מייקרוסופט כנראה עושים את זה קצת יותר פשוט (עריכה: לדעתי משתנה גלובלי שמתעדכן שהטרנזקציה של עכשיו היא באמצעות טריגר וכל טריגר מותנה בכך שהטרנזקציה אינה נכללת ברשימה השחורה), בכל אופן אני מבין ש mysql לא השכילו לפתור את הענין, וזה די מגביל, האם למישהו יש רעיון שיכול לעזור.
הצורך שלי הוא פשוט לעדכן טבלה תוך כדי טריגר, בלי שעל העדכון הזה עצמו יחול טריגר. המקרה: עמודה של order_by שהמשתמש יכול לעדכן ולדחוף רשומות אחורה או קדימה בתור, מה שאני רוצה זה שהטריגר ידחף את כל המספרים קדימה ואחורה בהתאמה כאשר מעלים או מורידים מספר ברשומה כלשהי.
תודה.פורסם במקור בפורום CODE613 ב26/05/2014 13:53 (+03:00)
-
עושים פשוט את מה שהצעת: מגדירים משתנה גלובלי, וברגע הפעלת הטריגר "מסמנים" אותו.
ראה כאן:
http://stackoverflow.com/a/9570455/1271037
http://illya-keeplearning.blogspot.co.il/2009/03/disable-triggers-in-mysql-50.html
http://stackoverflow.com/a/3577992/1271037אני מציע בכלל לא להשתמש בטריגר, אלא להשתמש לשם המיון בשדה דצימלי/שלם גדול וכל פעם שבן אדם רוצה למקם פריט, אתה מוצא מס' פנוי אחרי הפריט שלפני שקטן מהפריט שאחרי. לדוגמה:
1
2
3ואתה רוצה למקם את 3 אחרי 1, אז אתה משנה אותו ל1.0001:
1
1.001
2ומידי יומיים להריץ פרוצדורה מאוחסנת שמסדרת את העניינים וממספרת רגיל, כדי שחלון האפשרויות לא ייגמר (1.999999999999992
).
פורסם במקור בפורום CODE613 ב26/05/2014 17:56 (+03:00)
-
השאלה אם משתנה גלובלי לא יגרום למשהו הפוך: ששאילתא שרצה "מבחוץ" לא תריץ טריגר אם זה יהיה תהליך מקביל.
בדיוק באתי לענות לך את התשובה הזאת והקדמת אותי.
לגבי ללמד לקוח איך קוראים את הספרה השלישית אחרי הנקודה העשרונית (מתי האפס מוסיף ערך ומתי הוא גורע...), הייתי מעדיף להימנע מזה, תיכף אני מעלה פארודיה בעניין התמודדות של מתכנתים עם העולם הטיפש.... עדיף לשבת שעתיים לכתוב קוד, ולא להיות שלום כיתה א עשר דקות....פורסם במקור בפורום CODE613 ב27/05/2014 03:03 (+03:00)
-
לגבי ללמד לקוח איך קוראים את הספרה השלישית אחרי הנקודה העשרונית (מתי האפס מוסיף ערך ומתי הוא גורע...), הייתי מעדיף להימנע מזה, תיכף אני מעלה פארודיה בעניין התמודדות של מתכנתים עם העולם הטיפש.... עדיף לשבת שעתיים לכתוב קוד, ולא להיות שלום כיתה א עשר דקות....
המצב שלך בו עיצוב הDB מונחה מצורת המסכים אותם אתה מציג ללקוח, הוא גרוע מאוד.
אבל עדיין, גם בדרכך, הרי תוכל למספר את השורות בVIEW (כמו שהראית בפורום זה בעבר) בצורה טבעית ויפה.פורסם במקור בפורום CODE613 ב27/05/2014 10:56 (+03:00)
-
@דוד ל.ט.
המצב שלך בו עיצוב הDB מונחה מצורת המסכים אותם אתה מציג ללקוח, הוא גרוע מאוד.
אבל עדיין, גם בדרכך, הרי תוכל למספר את השורות בVIEW (כמו שהראית בפורום זה בעבר) בצורה טבעית ויפה.דומני שכבודו לא הקשיב לטענת התובע..... איך בדיוק אתה רוצה לתת ללקוח שליטה מלאה על האורדר ביי ברמת שורה (שהלקוח יקבע ידנית איזו שורה תהיה ראשונה ואיזו שניה וכו' ללא תלות בשום נוסחה כלל ועיקר) בלי לתת לו עמודה ייעודית שמטפלת בזה??? ומה יעזור view??? :? :? :? :? :? :? :? :?
פורסם במקור בפורום CODE613 ב27/05/2014 13:18 (+03:00)
-
דומני שכבודו לא הקשיב לטענת התובע..... איך בדיוק אתה רוצה לתת ללקוח שליטה מלאה על האורדר ביי ברמת שורה (שהלקוח יקבע **ידנית **איזו שורה תהיה ראשונה ואיזו שניה וכו' ללא תלות בשום נוסחה כלל ועיקר) בלי לתת לו עמודה ייעודית שמטפלת בזה??? ומה יעזור view??? :? :? :? :? :? :? :? :?
מה הקושי? מה הכונה ידנית?
אתה מציג לו טבלה, והוא בוחר שורה ויכול לעלות אותה ולהוריד אותה/ לקבוע לה מיקום אחרי שורה פלונית וכדומה, ואתה המתכנת קובע בהתאמה ערכים בעמודה שאתה ייעדת לכך שאיננה לעיני המשתמש הנכבד.הVIEW שלי אמור לעזור למקרה שאתה לא רוצה כלל קוד שיציג מספר מדומה בנתונים, אלא הDB בעצמו יחזיר מספרים אלגנטיים רציפים, לפי הסדר הלא אלגנטי של העמודה המסדרת.
פורסם במקור בפורום CODE613 ב27/05/2014 15:09 (+03:00)