PracticU

כתיבת SCRIPT ב-SQL

בלי כתוביותעם כתוביות
PracticU › קורס DBA אפליקטיבי - שפת SQL למתחילים › כתיבת SCRIPT ב-SQL
מילון מושגים:
סקריפט - קובץ המכיל רצף פקודות שמבוצעות על ידי מפרש, לרוב כדי להפוך משימות לאוטומטיות.
Northwind - מסד נתונים לדוגמה של מיקרוסופט, המדמה חברת מסחר ומשמש ללימוד ולהדגמת שאילתות SQL.
טבלה - מבנה במסד נתונים שמאחסן נתונים בשורות ועמודות. כל שורה היא רשומה וכל עמודה היא שדה.
משתנה - שם שמפנה למקום בזיכרון שבו נשמר ערך שיכול להשתנות במהלך ריצת התוכנית, כמו מספר, טקסט או אובייקט.
עמודה - שדה בטבלת מסד נתונים שמחזיק ערך מסוג מסוים עבור כל שורה, למשל שם או תאריך.

כתיבת SCRIPT ב-SQL
ההרצאה כותבת סקריפט קטן שמקבל הזמנה חדשה לדאטאבייס Northwind: שם לקוח ורשימת מוצרים עם כמויות, ומכניס אותם לטבלאות Orders ו-Order Details.
מבנה הסקריפט
1. בחירת הדאטאבייס: USE Northwind בתחילת הקובץ, למקרה שהמשתמש שכח לבחור את הדאטאבייס.
2. משתנה לשם הלקוח: DECLARE מסוג nvarchar(40), שמתאים לעמודת שם החברה בטבלת Customers. האזור הזה הוא היחיד שהמשתמש צריך למלא.
3. משתנה טבלה למוצרים: משתנה מסוג טבלה עם שתי עמודות, שם מוצר וכמות. בדוגמה מוכנסות שתי שורות לדוגמה.
4. מזהה לקוח: שאילתת SELECT מוצאת את CustomerID לפי שם הלקוח שבמשתנה. כך לא צריך לחפש את השם בכמה מקומות בסקריפט.
5. הכנסה לטבלת Orders: שורה חדשה עם CustomerID ותאריך ההזמנה מ-GETDATE(). בבדיקה הפלט הציג את המזהה שנוצר, ואחר כך בוטל השינוי עם ROLLBACK כדי שלא ייכנסו נתונים אמיתיים.
6. מזהה ההזמנה: SCOPE_IDENTITY() נותן את מספר ההזמנה החדשה. ההרצאה ממליצה עליו על פני @@IDENTITY, כי הוא מושפע פחות מטריגרים.
7. הכנסה לטבלת Order Details: INSERT עם SELECT מתוך המשתנה. מזהה המוצר נשלף מתוך Products לפי השם, המחיר נלקח ממחירון המוצר, והנחה מוגדרת ל-0.
שימו לב
הסקריפט נשמר כקובץ, ואפשר להכניס אותו לפרוצדורה כך שהמתכנת יפעיל אותה עם הערכים בלבד. בדיקה בסביבת פיתוח לפני הכנסה לנתונים אמיתיים מומלצת.
המשתמש ממלא רק את שם הלקוח והמוצרים, והסקריפט מטפל בשאר הפעולות.
השיעור הבא בקורס: Delete & Truncate

פרקי ההרצאה: כתיבת SCRIPT ב-SQL

  1. 00:00

    מבוא לסקריפט הזמנות חדשות

  2. 00:56

    הכרזת משתנה לשם הלקוח

  3. 01:50

    משתנה טבלה למוצרים וכמויות

  4. 03:24

    הכנסת ההזמנה לטבלת Order Details

  5. 04:54

    הזנת הזמנה חדשה לטבלת Orders

  6. 06:05

    בחירת Customer ID ותאריך ההזמנה

  7. 06:58

    בדיקה עם OUTPUT ו-ROLLBACK

  8. 07:55

    שליפת מזהה ההזמנה האחרונה

תמלול ההרצאה: כתיבת SCRIPT ב-SQL

הטקסט המלא של הדקות הראשונות בהרצאה «כתיבת SCRIPT ב-SQL» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:03

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

  2. 00:24

    שימו לב זה יכול לקבל הרבה מוצרים לא רק מוצר אחד. אז בואו נתחיל לעשות את זה. דבר ראשון אנחנו עושים use Northwind למקרה שיפתחו את הקובץ שלי.

  3. 00:34

    וישכחו פה להעביר לדאטה בייס נורטווינד. אם מישהו שוכח לא נורא כי יש את הפקודה use שתעביר לבד. שימו לב נניח מישהו שם את זה על מאסטר אנחנו עושים use northwind וזה פה מתחלף לנורטווינד.

  4. 00:47

    אז זה למקרה שמישהו ישכח להעביר נשים use northwind. הלאה אנחנו רוצים שם של לקוח אנחנו צריכים משתנה עזר שיהיה לו שם של לקוח אז אנחנו נכריז על משתנה עזר declare מכריזים על שם משתנה ונקרא לו נניח customer name.

  5. 01:04

    משתנה עזר מסוג שם של לקוח איפה השמות של הלקוחות בטבלת customers והשם שלהם נקרא company name nvarchar 40 יופי זה השמות של הלקוחות nvarchar 40 אז אני עושה פה משתנה עזר מסוג nvarchar 40 ונכניס לזה ערך בואו נבחר איזשהו לקוח נניח לקוח בשם סימונס ביסטרו שזה יהיה השם שלו אז אני עושה את זה כדוגמה שימו לב לכאן

  6. 01:34

    יכניסו המשתמשים את הערכים שהם רוצים לעבוד איתם, אני נותן דוגמא על השדה הזה. אז האזור הזה אני מגדר אותו כדי שהיוזרים יוכלו להכניס פה את הערכים שלהם.

  7. 01:46

    כשהם ירצו, הם יודעים שהאזור הזה, לפה הם מכניסים את הערכים. ופה תהיה התוכנה שלי. תכף אתם תראו את כל זה קורה. מה עוד אני צריך?

  8. 01:54

    אני צריך משתנה עזר שיכיל לי את המוצרים ואת הכמויות. אז בוא נכריז על משתנה עזר, נקרא לו New Products. שימו לב, משתנים ב-SQL מסומנים עם שטרודל אז אבל אני רוצה לא אחד אני רוצה כמה אז אני מכריז על טבלה יש לי משתנה שבתוך המשתנה הזה יושבת טבלה ובטבלה הזאת נשים שתי עמודות עמודה product

  9. 02:17

    name שזה שם המוצר שהם מביאים לנו שזה nvarchar 40 כמו שבונים טבלה רגילה גם בונים משתנה מסוג טבלה באותה צורה וגם אנחנו רוצים quantity מסוג integer כמות כמה הם רוצים להזמין אז יש לי פה משתנה עזר מסוג טבלה, בוא נמלא אותו, נעשה אינסרט כמו לטבלה רגילה, אז אני עושה אינסרט לתוך הטבלה ומכניס לפה values,

  10. 02:45

    נניח שאנחנו נעשה דוגמא עם chai, 20 יחידות, ויהיה לנו פה עוד איזשהו מוצר שמזמינים, נניח שזה יהיה טופו, 10 יחידות. אז מה שעשינו זה עכשיו נתונים לדוגמה באזור הזה, במציאות היוזרים המשתמשים יכניסו את הנתונים שלהם ואז יהיה לי סקריפט מוכן בדיסק שכשאני רוצה להכניס הזמנה חדשה אני רק לכאן מכניס את השם ולכאן את המוצרים ואת הכמויות.

  11. 03:16

    במציאות אתם יכולים לשלוח את זה למתכנת שהוא יעשה את זה כחלק מאתר האינטרנט לדוגמה. אוקיי אז יש לנו שם של לקוח ויש לנו את המוצרים שזה פה שם של לקוח והמוצרים עכשיו נשאר לנו רק להכניס הכל לתוך טבלת order details.

  12. 03:31

    נכניס את כל המוצרים ואת כל ההזמנה לטבלת Order Details. בואו ננסה לעשות Insert ל-Order Details. אנחנו עושים Insert. פה זה כבר האזור הטכני שלי.

  13. 03:41

    Insert, ואני גורר לפה את ה-Order Details. שימו לב, הרעיון של ההפרדה שמי שיבוא ויפתח את הסקריפט לא יצטרך לחשוב הכל מההתחלה, יכניס פה רק את הערכים שהוא רוצה וזהו. Insert של Order Details, ואיזה עמודות יש לנו?

  14. 03:56

    יש לנו עמודת Order ID שצריך לתת לו, יש לו עמודה של Product ID שצריך לתת לו, את ה-Unit Price ו-Quantity והנחה, שההנחה תהיה 0. עכשיו בואו נחשוב מאיפה אנחנו מביאים את העמודות האלו.

  15. 04:18

    מאיפה אנחנו מביאים את ה-Order ID, את ה-Product ID? עקרונית הייתי רוצה לעשות דבר כזה, Insert עם Select מתוך משתנה New Product.

  16. 04:27

    Select From New Product. אבל ב-New Product אין לי Order ID, אין לי גם פרודקט ID. בניו פרודקט יש לי רק את השם ואת הכמות. אז את ה-Quantity אני יכול לתת, אבל מאיפה אני מביא את ה-Order ID?

  17. 04:42

    כדי שיהיה לי Order ID אני צריך לפני כן פה למעלה מעליו להכניס שורה חדשה לתוך טבלת Orders הזמנות. אם אני אכניס שורה חדשה לטבלת Orders יהיה לי Order ID. בטבלת Orders אני צריך להזין הזמנה חדשה ולקבל את ה-Order ID. קודם כל, לפני שמתחילים עם כל הסיפור הזה של ה-insert כאן,

  18. 05:03

    נתחיל עם ההזנה לתוך טבלת orders. אז אנחנו הולכים להזין מה? את המספר של הלקוח, ונניח את התאריך. רק את המספר של הלקוח ותאריך. עכשיו, נשאלת השאלה מאיפה אני אקח את המספר של הלקוח, הרי יש לי רק את השם.

  19. 05:18

    אז אני עושה פה Select* From customers where company name שווה למה? למשתנה הזה. כדי לבדוק, לפני שאני עושה את המשתנה, שיהיה לי קל לבדוק.

  20. 05:32

    בואו נראה שזה עובד. כן, זה עובד לי. הנה, השאילתה הזאת בחרה לי רק את ה-Simons Bistro הזה, שזה ה-Customer ID שלו.

  21. 05:43

    אז אני פה במקום השם מכניס את ה-Customer, את המשתנה. עכשיו, כשיש לי את המשתנה לא צריך ללכת בכל הסקריפט ולחפש איפה עוד מופיע ה-Simons Bistro הזה.

  22. 05:54

    יכול להיות שזה סקריפט טהור. בגלל זה אני עושה משתנה בהתחלה, נותן לו איזשהו שם ואז היוזר שמגיע פעם ראשונה לראות את התוכנית שלי מכניס רק פה את הערכים וזהו בכל מה שקורה פה בפנוכו הוא יכול לא לגעת זה עובד אוטומטית ואני בוחר מתוך הדבר הזה רק את העמודה customer ID יופי אז יש לי customer ID שזה בעצם העמודה הזאת של ה-select

  23. 06:16

    ו-order date שזה ה-get date של עכשיו הפונקציה שמחזירה לי את התאריך של עכשיו מה שזה יעשה לי זה יכניס לי לטבלת orders שתי עמודות כאשר אורדר דייט נכנס מהפונקציה ו-Customer ID נכנס מתוך הסלקט הזה.

  24. 06:33

    בואו נעשה לזה בדיקה, נעשה לזה בדיקה ונראה שזה באמת עובד. תראו, הסלקט הזה נותן לי בסוף Customer ID והעמודה של התאריך של עכשיו, וזה הולך להיכנס ל-Customer ID ו-Order Date.

  25. 06:48

    בואו נראה שזה באמת עובד כל מה שעשינו. ננצל פה Output, פקודת Output, רק שידפיס לי את זה על המסך, את כל מה ש-inserted, inserted נקודה כוכבית.

  26. 06:58

    כל מה שהוא הולך להכניס שידפיס לי במסך, עכשיו אני לא באמת רוצה את ההכנסה הזאת, אז כדי לא לבצע את זה על אמת, אני אעשה פה בגין טרנזקציה, אוקיי, אני מתחיל טרנזקציה ועושה לזה למטה פה rollback, כדי שהוא לא באמת יכניס לי ערכים לתוך הטבלת ה-orders, אני רוצה רק לעשות בדיקה, עכשיו בואו נעשה בדיקה,

  27. 07:20

    ואנחנו מקבלים output שלטבלת ה-orders נכנסה הזמנה חדשה 11,083, בוא נריץ את זה עוד פעם נכנסה עכשיו הזמנה 11,084 ושימו לב זה לא באמת נכנס יש רולבק אבל עדיין הדנטיטי מתקדם קדימה גם עם הרולבק אז ככה נוצרים חורים בעמודת הדנטיטי האוטומטית אז אנחנו מקבלים עכשיו אינסרט לתוך טבלת אורדרס יפה מאוד שזה בדיוק מה

  28. 07:49

    שרציתי הרי המטרה שלנו זה לקחת את האורדר איידי הזה שהכנסנו אותו עכשיו ולהכניס אותו פה באורדר דיטלס הרי אנחנו צריכים נכניס את כל המוצרים ל-Order Details.

  29. 08:01

    אז איך אני עושה את זה? אני צריך לקחת את 11,084. מה זה 11,084? זה ה-inserted האחרון, זה ה-ID האחרון. אז אני יכול להשתמש בפונקציה שטרודל שטרודל אדנטיטי ומחזירה לי את ה-ID האחרון, אבל מה

לקורס המלא: קורס SQL ו‑DBA אפליקטיבי

ההרצאה הקודמת: הוספת שורה לטבלה למתקדמים - Insert

ההרצאה הבאה: Delete & Truncate

הרצאות קשורות מקורסים אחרים

  • כתיבת Script המגלה כתובת IP חיצונית
  • לינוקס Script - חלק 1
  • FIRST YML SCRIPT
  • ה-SCRIPT הראשון שלי

קורסים נוספים במסלול

  • קורס NoSQL - MongoDB
  • קורס SSIS
  • קורס BI - ניתוח מסדי נתונים - Qlik Sense
  • קורס Power BI