SET TRANSACTION

  • Post
    esti levie
    משתתף
    מה המשמעות של הפקודה SET TRANSACTION בפריורטי?

    יש לי במערכת פקודת UPDATE ואחריה SET TRANSACTION
    בדקתי את ערך השדה בטבלה לפני ה UPDATE, היה בו X
    אחרי ה UPDATE היה בו Y (בהתאם ל UPDATE)
    אחרי ה SET TRANSACTION היה שוב X

    למה?

    תודה מראש

מוצגות 5 תגובות – 1 עד 5 (מתוך 5 סה״כ)
  • Replies
    אלמוני
    אורח
    פעם ביררתי זאת דרך חברה מיישמת ואמרו שאין משמעות לפקודה הזו. דווקא לפי הדוגמא שלך יש. אם באמת יש טרנסקציות בפריוריטי אז צריך להשתמש בפקודה COMMIT כדי לסגור את הטרנסקציה.

    SET TRANSACTION נדרש בדרך כלל כאשר צריך לבצע כמה עדכונים ביחד (בעיקר בהנה"ח) כאשר אסור שאחד יתבצע והשני לא. הטרנסקציה דואגת לכך שאו שהכל יתבצע או שכלום לא יתבצע.

    הפקודה צריכה להיות *לפני* UPDATE ולא אחרי. האם מדובר בקוד סטנדרטי?

    esti levie
    משתתף
    מדובר בקוד פרטי
    ראיתי גם בקוד סטנדרטי שימוש ב SET TRANSACTION ללא COMMIT
    בדוגמא הסטנדרטית יש INTERFACE ואחריו
    SET TRANSACTION; /* INTERFACE called sql_commit_all(),

    ה SET TRANSACTION אמור לתחום את הקוד מתחת עד ה COMMIT? כי גם בסטנדרט זה לא ממש נראה ככה.

    מה זה יכול להיות? למה זה מגלגל לי את המצב אחורנית?

    אלמוני
    אורח
    TRANSACTION = סדרת פעולות. לפי הגדרות SQL, הפקודה COMMIT מבצעת את כל הפקודות אשר בסדרה, בעוד ROLLBACK מבטלת אותן.

    אם זכור לי נכון, אין COMMIT ואין ROLLBACK ב-SQL פריוריטי לכן מומלץ לא להשתמש ב-SET TRANSACTION. כנראה שריד של תחביר מאד ישן.

    esti levie
    משתתף
    אם למשהו יש תובנות נוספות בנושא אשמח לשמוע.
    אני מנסה להבין למה הפקודה מבטלת את פעולת ה UPDATE שלפניה
    תודה
    yitzchok
    משתתף
    IL
    אולי אולי אולי יישום ה set transaction של פריוריטי ברמת התרגום ל-sql של הדטהבייס כולל rollback של כל טרנסקציה שפתוחה?

    בדרך לבדוק זה בעזרת profiler או כלי דומה ברמת הדטהבייס. יכול להיות שהרצת הקוד שלך במצב דיבוג יגלה משהו אבל אני לא משוכנע בכלל.

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
מוצגות 5 תגובות – 1 עד 5 (מתוך 5 סה״כ)
  • יש להתחבר למערכת על מנת להגיב.