עבור לתוכן

שאלה לגבי ביצוע שתי פעולות SQL בו זמנית

Featured Replies

פורסם

שלום,

כדי לעדכן בסיס נתונים, אני משתמש בUPDATE tabe SET... כדי להוסיף אני כותב INSERT INTO... ואם אני רוצה לעשות את שני הפעולות בquery אחת? איך אני מחבר בניהן כדי שהדבר יעבוד?

תודה מראש.

פורסם

אתה יכול ליצור פקודת SQL אחת שמכילה את שתיהן מופרדות באמצעות ;

ואתה יכול ליצור stored procedure.

פורסם

מה הכוונה?

באותה שאילתא אתה גם רוצה ליצור שורה חדשה (עם ערכים), ואז לעדכן את הערכים?

למה לא ליצו ראותה כבר עם הערכים הטובים?

הרי כשאתה יוצר שורה חדשה בDB אתה נותן לשדות שלה נתונים. אני לא רואה כל היגיון לשנות אותם מיד לאחר מכן.

אגב, סטור-פרוסיג'ר לא כ"כ יענה על זה, סטור-פרוסיג'ר היא פשוט שאילתה ששמורה בתוך הDB, שאתה רק שולח את הערכים לתוכה, ושקוף לך מה שקורה בפנים. מיילא פונקציית של PL/SQL הייתה עוזרת פה, אבל עד כמה שאני יודע זו אפשרות שקיימת רק במסדי נתונים של Oracle (אני יודע שהם המציאו את זה, אני לא יודע אם חברה מתחרה שלה עושה את השיטה הזו גם כן.

פורסם
  • מחבר

אתה יכול ליצור פקודת SQL אחת שמכילה את שתיהן מופרדות באמצעות ;

ואתה יכול ליצור stored procedure.

";" זה בעצם מה שהייתי צריך...

תודה לשניכם...

אבל משום מה אני בכל זאת לא מצליח לשלב משהו בתוך קוד קיים.

פורסם

מה אתה רוצה לעשות?

קשה לי לחשוב על פעולה שדורשת כזו שאילתה.

אגב, כאשר אתה מפריד משהו בנקודה-פסיק בsql, אתה בעצם מפריד את העסק ל2 שאילתות נפרדות.

פורסם

זה חוסך לך קצת את הקיראה הנוספת לאובייקט שמריץ את השאילתא.

ודוגמא לפעולה שדורשת 2 שאילתות (ל Aurora Borealis): הוספת פעולה לארוע מסויים ועדכון סטטוס הארוע בהתאם לפעולה שננקטה.

פורסם

אבל בין ההוספת אירוע, לבין העדכון של האירוע קורים כמה פעולות מצד המשתמש (או התוכנה), ולכן אם העדכון קורה מיד לאחר היצירה (הוא רצה לעשות את 2 הפעולות ממש צמודות), אין לתוכנה/מתמש בכלל הזדמנות לגרום למידע המוכנס לDB להשתנות.

לכן לדעתי אפשר פשוט להכניס את המידע המעודכן לDB כבר בפקודה שיוצרת את השורה החדשה, ולא פעם אחת ליצור את השורה עם מידע מסויים, ומיד אחר כך לשנות אותו.

אלא אם כן אתה מדבר על 2 רשומות שונות לגמרי (מה שלא הובן כ"כ מהשאלה פה), ואז זה הגיוני לעשות דבר כזה. למקרה כזה, באמת אפשר לשים את הנקודה-פסיק הזאת, למרות שלדעתי זה לא פתרון טוב, כי מבחינה לוגית-תכנותית הוא לא הכי מתאים. במקרים כאלה משתמשים בPL/SQL, אם הDB שלך תומך באפשרות.

פורסם
  • מחבר

אני עורך (מנסה) מערכת phpBB ושם יש לי מוד מסויים מותקן. זהו מוד נקודות - מישהו תורם למישהו נקודות. המוד במקור מבצע רק פעולה של התרומה - כלומר, מוסיף נקודות למישהו וזהו. אני מנסה גם לתעד את התרומה. יצרתי טבלה של התורמים ובה אני רוצה לאכסן מידע אודות התרומה - מי, מתי וכמה. מה שניסתי לעשות ע"י 2 שאילתות בתוך אחת זה שכשהמוד מעדכן את המידע אודות מצב הנקודות של המשתמש, מתבצע גם רישום בטבלה החדשה שיצרתי. מסיבה כלשהי, זה לא כל כך מצליח לי...

פורסם

תחקור קצת על האפשרות של טרנסאקציות בDB.

באנגלית: TransActions, לדעתי כדאי לך לחקור קצת את מה שהאפשרות הזו נותנת, שכן בעזרתה תוכל לדאוג מכל הקטע של אם יהיו כפילויות במידע בDB, ואולי זה גם יפתור לך את הבאגים שאתה נתקל בהם.

אם תפרט מה בדיוק ניסית לעשות (לפרט שליפות SQL, ואולי גם את הERD שלך), יהיה יותר קל לעזור לך.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים