
DECLARE עם שם הקורסור, ואחריו FOR ופקודת SELECT. בדוגמה: עמודת EmployeeID מטבלת employees.OPEN מפעילה את השאילתה ומכינה את השורות.FETCH NEXT FROM עם INTO טוענת את השורה למשתנים מקומיים. זהו תהליך שחוזר על עצמו בתוך לולאה.WHILE @@FETCH_STATUS = 0 ממשיכה כל עוד ההבאה הצליחה. בדוגמה נכתבת ב-Notes ההערה This is an even row לשורה זוגית, ו-This is an odd row לשורה אי-זוגית.CLOSE ו-DEALLOCATE, כדי לשחרר את המקום שהקורסור תופס בזיכרון.הטקסט המלא של הדקות הראשונות בהרצאה «cursor - חלק 1» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, שיעורנו היום הוא המשך בנושא של tsc על טרנזק נספיאל, ובשיעור היום אנחנו נראה מהו קרסור, מה הוא נותן לי, מהם היכולות ומהם המגבלות.
קרסור זה בעצם אובייקט שאנחנו צריכים להגדיר אותו בתוך הדאטאבס, והוא מאפשר לי לבצע פעולות סלקט אולם לעבור על הפלט רואו ביי רואו. בעוד שבסלקט אנחנו תמיד עובדים בבלק אחד על כל הפלט שלנו, מבצעים מניפולציית נתונים על קבוצת נתונים בבת אחת, כדי שימוש בcursor אנחנו יכולים לעבור row by row על הפלט ולתת
טיפול נקודתי לשורה כזאת לעומת שורה אחרת. כדי לעבוד על cursor אנחנו צריכים ראשית כל להגדיר לעצמנו את הcursor והוא משתנה לכל דבר ועניין.
אנחנו צריכים להגדיר cursor שאיתו אנחנו עובדים, לתת לו שם והשם חייב להיות תקני כמו כל שם של משתנה בתוך הdatabase שלנו. once הגדרנו את הcursor זהו אובייקט אישות של בזיכרון ואנחנו צריכים גם לעשות לו open.
לפתוח אותו open של הקרסור אם פתחתי את הקרסור והקרסור הוא בעצם עטיפה של פקודת סלקט אז ברגע שאני עוטף את הפקודת סלקט ונותן לה שם כקרסור פתחתי אותה אני צריך להביא את השורה הראשונה השורה הראשונה השורה שאותה אנחנו רוצים להביא זה תהליך של פאצ'ינג
פאצ' נקסט פאצ' נקסט רואו זה להביא את השורה הראשונה לטעון אותה לתוך המשתנים הלוקאליים של התוכנית הבאתי את השורה הראשונה אנחנו כבר יכולים להיכנס לתוך לולאה ובמהלך הלולאה אנחנו מתקדמים משורה אחת לשורה הבאה ומבצעים את המניפולציה הנדרשת לכל שורה הלולאה מתקדמת הלולאה שאותה אנחנו רושמים כל עוד יש לנו משתנה
סביבה שנקרא שטרודל שטרודל פאצ' סטטוס כל עוד הפאצ' סטטוס יהיה שווה לאפס אנחנו נכנסים לתוך הלולאה ומבצעים את הנדרש עבור השורה הנוכחית.
אז שימו לב אנחנו מגדירים קבוצת אוכלוסייה על ידי פקודת סלקט, אחר שהגדרנו את האוכלוסייה שעליה אנחנו רוצים לעבוד אנחנו עוברים עליה רוב בי רוב.
כל סלקט ניתן להגדיר קרסור ישנם כמה אילוצים בסלקט ביכול להיות אינטו קלוז ויכול להיות קומפיוט ביי או קומפיוט אלו הם האילוצים בחלק של הסלקט כאילו מעבר לכך כל משפט סלקט יכול לתת לנו הגדרה לקרסור.
בואו נבנה תוכנית. בתוכנית שלנו אנחנו רוצים ליצור קרסור עבור הטבלת employees ובגין כל שורה לתת טיפול נפרד. בואו נעשה שעבור השורות הזוגיות אנחנו מכניסים ערך מסוים לתוך הטבלה ועבור השורות האי-זוגיות אנחנו נכניס ערך אחר.
כלומר אנחנו חייבים לתת כאן טיפול מענה ברמה נקודתית R שורה ולא טיפול עבור הטבלה. חבלה כולה אז ראשית כל דיקלר בואו נגדיר קודם כל את המשתנה שיעזור לנו משתנה שיהיה counter lcounter integer שאיתו אנחנו נרוץ לאחר שהגדרנו את המשתנה בואו נגדיר גם את הקרסור שלנו דיקלר אנחנו נותנים שם לקרסור כמו כל משתנה אחר בתוכנית קרסור for
אנחנו מציינים בדיוק כמו שאנחנו מתחילים אובייקט של views פלואיז שאנחנו עוטפים שאילתת סלקט גם כאן for ומיד אנחנו קובעים את פקודת הסלקט שלנו Select Employee ID for Employees נשלוף רק את עמודת Employee ID מתוך הטבלה אבל זה הוא הקרסור זוהי קבוצת האוכלוסייה כל טבלת Employees אוקיי עכשיו כבר תביגי את הנתונים אז ראשית כל צריך לפתוח את הקרסור לפתוח
Open Name ברגע שפתחתי אז אני יכול כבר לבטל את השלב השלישי כפי שהוא רשום כאן לפני תביא לי את המידע עצמו לאן תכניס לי את הנתון ה-employee ID ירוצו כאן רוב וירוב ובכל איטרציה ייכנסו לתוך L-Counter למונה שלנו לערך שמקבל את ה-employee ID בכל איטרציה ערך אחר
אוקיי, קיבלתי את הערך הראשון, כעת אני כבר יכול להיכנס ללולה אז אם כן הגענו לשלב הרביעי של יצירת קרס של עבודה מול קרסורים while what strudel strudel fetch סטטוס שווה לאפס כל עוד הוא שווה לאפס אנחנו יכולים להמשיך להיכנס לתוכנית שלנו כחלק מה-while לבצע את התוכנית קודם
כל בואו נעטוף את זה בביגין ובתוך החלק של הביגין אנחנו רוצים לבדל בין שורות איזוגיות ובין שורות אי-זוגיות אז בואו ונכתוב את זה if l-count הערך שהתקבל כלומר השורה הנוכחית שעליה אנחנו רוצים האם פלואי הידיד אם הוא זוגי אם הוא מודול הוא שתיים כלומר אם אני מחלק אותו בשתיים ולוקח את השארית
אם השארית היא שווה לאפס זה אומר שהמספר מתחלק בצורה מלאה בשתיים כלומר זהו מספר זוגי. אם כך קדימה בואו נעדכן את טבלת פלואי בהתאם.
עד בטבלות פלואי מעדכן את העמודה של נוטס שווה לשורה הזאת, היא בעצם שורה זוגית. This is an even law. אנחנו מעדכנים את השורה שהיא בעצם שורה זוגית, אבל אנחנו לא עושים את זה על כל טבלת אינפלואי, אז בואו נוסיף את החלק של ה-worklose.
Worklose לא יהיה פריידי שווה לערך שעליו אנחנו נמצאים את השורה שבה אנחנו עומדים, היא מיוצגת על ידי l-count שווה ל-strudel l-count.
מצוין זה החלק הראשון של ה-if זה הטיפול במקרה של שורות זוגיות בואו ננסה להוסיף שורות אי-זוגיות ולכן מספיק לנו ב-else לא צריך כאן else if כי זה בעצם המשלים של כל שאר השורות else if העדכון יתבצע בהתאמה a vet employees that notes שווה is an odd row מצוין אנחנו מעדכנים במידה
ויש לנו שורות אי-זוגיות נכניס את הערך המתאים לתוך עמודה נעוץ, אבל זה רק במידה ששוב פעם, חלק של הוול קלוז ואונגלואי איי-די שווה ל-L אונגלואי איי-די.
וואנס יצרנו את העדכון, חברים וחברות, אני שמח לבשר שאנחנו מאוד מאוד קרובים לסיום, יש לנו כבר טיפול בכל אחת מהשורות בנפרד בהתאם לערך שלה, בהתאם למיקומה, בהתאם לאונגלואי איי-די, כל מה שמותר לנו כרגע לעשות זה בעצם לסגור את חלק של הביגיל, אבל רגע בואו נביא את ה-fetch, fetch next from the main, להביא את השורה
הבאה שהרי אנחנו רצים כברור בהירור שורה אחר שורה על מנת לעדכן. fetch next from the main אנחנו צריכים להכניס את זה שוב פעם כפי שרשמנו מקודם into strudel l_com.
עכשיו אנחנו כבר יכולים לסגור את נולאת הווייל שלנו ועכשיו אנחנו צריכים לבשר שהתוכנית שלנו העובדת על הקרסורים כמעט כמעט מוכנה שהרי אובייקט שפתחנו אותו והוא ישות שמופיעה כרגע בזיכרון אנחנו גם נדרשים לסגור אותו אז בואו נסגור את הקרסור חלילה אבל מלשכוח זאת ויותר חשוב לפנות את המקום זה יהיה עלוקייט לשחרר את המקום בזיכרון קרסורים
בהגדרתם יושבים בתוך הtempdb זהו מידע ששמור בתוך הtempdb אנחנו נראה שאנחנו יכולים לייצב קרסור, כך שהוא מנותק מהשאילתה עצמה. לאמור, once declared, once יצרתי את הקרסור, כל הנתונים שהתבצעו בטבלת אינפלואיז מכאן ואילך כבר לא השתקפו לי במהלך התוכנית.
אף שאני נמצא כאן במהלך התוכנית ומישהו אחר, משתמש אחר, שינה את טבלת אינפלואיז, הוסיף שורות, חיסר שורות, עדכן שורות נתונים אחרים, זה לא מה שהשתקף לי באוכלוסייה, כי ברגע ששלפתי את האוכלוסייה, יצרתי מבחינתי את הזמן.
כל השאילתה מכאן ועד הלילה תקפה עבור הנתונים שאותם אני צילמתי. אנחנו נראה איך אנחנו מסמלים את זה, אז בואו, לא נותר לנו כרגע אלא לבצע את הריצה שלנו.
אני רוצה לסמן את הקטע קוד. F5, אנחנו מקבלים אינדיקציה שהצלחנו בעצם להריץ. כל השורות עודכנו, נכון? בואו נבדוק את זה. יאללה, סלפט.
ווילס ניימפסי קלאס ניימפ נאוטס פלוי איי-די פרומין פלואיידס בואו נשלוף את המידע F5 והנה הפלא ופלא איזה יופי כל שורה קיבלה טיפול ומענה מיוחד בהתאם למיקומה בהתאם למספר עם פלוי איי-די במידה והוא אי-זוגי קיבלנו this is an out or במידה והוא זוגי this is an even row וכו'
וכו' בול נקודתי ברמה של שורה כזו או אחרת. אין ספק, יכולנו למצוא את זה גם ללא קרסור, אני כבר חושב על רעיון שימוש ב-case, שימוש בשתי סקריפטים, שני אפדייטים שונים, אבל בכל זאת רצינו כאן לתרגל איך אנחנו כאן בעצם משתמשים בחלק של הקרסור, צובעים אוכלוסייה ורצים עליה row by row.
נקודות נוספות שחייבים לדעת בעבודה מול קרסורים, שקרסור אני יכול להגדיר אותו אינסנסיטיב, כלומר בלתי רגיש. זה מה שאנחנו ציינו שזהו קרסור שהוא נמצא בתוך הטמפ ביבי והוא מנותק, הוא מנותק מכל שינוי אחר שיחול בטבלה.
נקודה נוספת מעניינת שאנחנו יכולים להגדיר בקרסור פרלמנט הרמסה זה היכולת שלו להיות סקרול. אני יכול להגדיר קרסור שהוא יהיה מסוג סקרול.
מה זה נותן לי? מצוין. עד עכשיו בכל הקרסורים שלנו, תמיד עשינו fetch next גם כאן בתחילת הקרסור fetch next כלומר תמיד התקדמנו קדימה לשורה הבאה ב-scroll אנחנו יכולים לנוע קדימה ואחור next and period לזוז קדימה ואחור בכלל כל השימוש ב-next עצמו שופך לנו מגוון של אפשרויות
אנחנו יכולים להביא את ה-next כמו שראינו בדוגמה שלפנינו מהcursor name לתת את השם אנחנו יכולים לא לקחת את ה-next אלא להביא את הקודם, את השורה הקודמת, לחזור אחורה מול קרסור name.
בנוסף אנחנו יכולים להביא את השורה הראשונה fetch first from שוב פעם שם הקרסור במקרה שלנו זה main זה יכול להיות דבר אחר מתוך הקרסור להביא את השורה הראשונה. אנחנו יכולים לדלג לשורה האחרונה אנחנו יכולים להביא כל אחת ואחת מהשורות כשאנחנו רוצים נקסט פרייר פרסט לאסט אני יכול גם להביא שורה נקודתית אבסולוט אין אני רוצה את שורה המספר 6 שורה המספר 7 וואטאבר
כל שורה אני מציין את המספר רושם אבסולוט המספר ואנחנו מביאים אותו מתוך הקרסור שלנו עם הנוספת שאנחנו יכולים לא בצורה אבסולוטית אלא כחלק יחסי אוקיי אני כרגע נמצא בשורה המספר 3 מכאן ואילך אני רוצה שתי שורות קדימה תן לי ספר Related ליחס למקום שבו אני נמצא אני רוצה שתי שורות קדימה רושם שתיים וממשיך From cursor mate אם כן ראינו מגוון רחב של