אינטרנט ישראל
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
ראשי » מדריכים » לימוד MySQL » Stored Procedure עם משתנים ב-MySQL

Stored Procedure עם משתנים ב-MySQL

רן בר-זיק ספטמבר 28, 2009 4:58 pm אין תגובות

יצירת פונקציות המקבלות ומחזירות משתנים ב-MySQL.

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.

במאמר הקודם למדנו על Stored Procedure – כיצד ליצור אחד כזה ולהשתמש בו. Stored Procedure הוא פונקציה שיכולה לקבל פרמטרים וגם להחזיר פרמטרים.

הכנסת פרמטרים ל-Stored Procedure

על מנת שה-Stored Procedure שלנו יקבל משתנים, אנו צריכים להגדיר לו איזה משתנים לקבל, בואו לדוגמא נניח שאנו רוצים ליצור פונקציה שמקבלת פרמטר של מספר קליינט ומחזירה לי את השורה שלו בטבלת my_costumer שאותה אנו מכירים ממאמרים קודמים.

ראשית, כפי שלמדנו במאמר הקודם אנו נשנה את ה-DELIMITER שלנו ל'//' :


DELIMITER //

אחרי כן, נתחיל בכתיבת ה-Stored Procedure שלנו, שהוא די דומה ל-Stored Procedure שכתבנו במאמר הקודם אך הפעם אנו כותבים משהו בתוך הסוגריים של הפונקציה – ראשית את המילה IN שמשמעותה היא פרמטר שנכנס לפונקציה ואז את שם הפרמטר. השם חשוב כי אנו נשתמש בו בתוך הפונקציה כמקובל. לבסוף אנו נכתוב את סוג הפרמטר, במקרה שלנו הוא TINYINT. (זה הזמן להזכיר את המדריך לסוגי הנתונים שיש ב-MySQL). את שאר הפונקציה כותבים בדיוק כמו כל Stored Procedure.

הנה הדוגמא המיוחלת:


CREATE PROCEDURE showClient(
IN cl TINYINT)
BEGIN
SELECT * FROM my_costumer WHERE costumer_id = cl;
END //

לא נשכח בסוף להחזיר את ה-DELIMITER למה שהוא היה קודם.


DELIMITER ;

שימו לב לפרמטר 'cl' שהוא הדבר השונה והחשוב כאן וכיצד הוא משתלב ב-select. כאשר אני קורא לפונקציה, אני חייב להכניס את הפרמטר כדי לקבל תשובה. אם אני אכניס '1', אני אקבל את הפרטים של לקוח שה-costumer_id שלו שווה לאחד. וכך אקרא לפונקציה שלי.


CALL showClient(1);

והיא תחזיר לי את השורה הנכונה:


+-------------+---------------+--------------+--------------+
| costumer_id | costumer_name | costumer_age | costumer_sex |
+-------------+---------------+--------------+--------------+
|           1 | moshiku       |           21 | male         |
+-------------+---------------+--------------+--------------+

קבלת משתנים מה-Stored Procedure

בעוד שקל יחסית להכניס משתנים ל-Stored Procedure שלנו. קבלת משתנים היא טיפה'לה יותר מסובכת. ראשית, אנו ניצור Stored Procedure שמטרתו להחזיר לי 2 משתנים – הראשון הוא הגיל המקסימלי בטבלה שלי והשני הוא הגיל הממוצע. למי שלא זוכר את השיעור על שליפת נתונים, עושים את זה באופן הבא:


SELECT AVG(costumer_age) FROM my_costumer;
SELECT MAX(costumer_age) FROM my_costumer;

הדבר השונה היחידי בבניית Stored Procedure שנותן לנו פרמטרים הוא לכתוב OUT במקום IN.


CREATE PROCEDURE getAges(
OUT avgAge TINYINT,
OUT maxAge TINYINT
)
BEGIN
SELECT MAX(costumer_age) INTO maxAge FROM my_costumer;
SELECT AVG(costumer_age) INTO avgAge FROM my_costumer;
END //

יצרתי Stored Procedure ששמו הוא getAges. הוא מחזיר לי שני פרמטרים – avgAge ו-maxAge ששניהם מסוג TINYINT. שאילתת ה-SELECT מכניסה את התוצאות לפרמטרים באמצעות INTO. גם זה חלק חשוב, ה-INTO נכנסה מיד אחרי הצהרת ה-SELECT ולפני ה-FROM.

עכשיו נוכל להריץ את ה-Stored Procedure. כשאנו מריצים את ה-Stored Procedure אנו חייבים לכתוב שמות של שני פרמטרים בתוך הסוגריים על מנת שנוכל להתייחס אליהם. מבולבלים? לא צריך להיות. פשוט בוחרים שמות של משתנים (יכולים להיות אותם שמות שיש בתוך ה-Stored Procedure). כך זה נראה:


CALL getAges(@ageMAX, @ageAVG);

מה זה ה'@' האלו? זה הסימן למשתנים. אם אנו מריצים את זה, אנו לא מקבלים כלום. על מנת לקבל את המשתנים, אנו צריכים לבחור אותם:


SELECT @ageMax;

אפשר גם לבחור כמה:


SELECT @ageMax, @ageAVG;

וזה יחזיר לי את התוצאות שיש במשתנה:


+---------+---------+
| @ageMax | @ageAVG |
+---------+---------+
| 22      | 42      |
+---------+---------+

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

⚠️המדריכים כאן הם טעימה בלבד! יש ספר מקיף המלמד MySQL מרמת בסיס ועד רמה מתקדמת. הספר הדיגיטלי, שרלוונטי גם לכל מסדי הנתונים שעובדים עם SQL – זמין כאן כחלק מהפרויקט "ללמוד ג'אווהסקריפט בעברית" – זו הדרך הטובה ביותר ללמוד באופן מקיף MySQL.

במאמר הבא אנו נלמד על אינטגרציה בין MySQL ל-PHP.

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.
למדריך ה-MySQL הקודםViews ו-STORED PROCEDURES ב-MySQL
למדריך ה-MySQL הבאMySQL ו-PHP
לתפריט המדריכים ל-MySQL
MySQL
ללמוד ג'אווהסקריפט בעברית

ללמוד לתכנת ג'אווהסקריפט בעברית שגייס יותר משלוש מאות אלף שקל ולמעלה מ-2000 תומכים - בואו ללמוד עכשיו איך לתכנת.

רשימת הנושאים
  • מדריכים
    • ריאקט
    • טייפסקריפט
    • ECMAScript 6
    • ES20XX
    • Node.js
    • Express
    • רספברי פיי
    • Babel
    • docker
    • MongoDB
    • Git
    • לימוד MySQL
    • SASS
    • jQuery
    • CSS3
    • HTML 5
    • SVN
    • LESS
  • פיתוח אינטרנט
    • פתרונות ומאמרים על פיתוח אינטרנט
    • jQuery Scripts
    • jQuery למתקדמים
    • יסודות בתכנות
    • נגישות אינטרנט
  • חדשות אינטרנט
  • מידע כללי על אינטרנט
    • רשת האינטרנט
    • בניית אתרי אינטרנט
  • rss logo

    לכל המאמרים

    לכל המאמרים שפורסמו באינטרנט ישראל משנת 2008 ועד עכשיו.
  • rss logo

    RSS Feed

    משתמשים בקורא RSS? אם כן, עקבו אחרי אינטרנט ישראל באמצעות פיד ה-RSS!
    מה זה RSS?
  • Twitter logo

    עקבו אחרי בטוויטר

    בחשבון הטוויטר שלי אני מפרסם עדכונים מהירים על חדשות בתחום התכנות והיזמות, התרעות על מצבי חירום ורכילות בוערת על תחום הווב.
    מה זה טוויטר?
  • facebook like image

    ערוץ הטלגרם של אינטרנט ישראל

    בערוץ הטלגרם של אינטרנט ישראל אני מפרסם את הפוסטים של באתר וכן עדכונים טכנולוגיים נוספים.
    מה זה טלגרם?
  • github logo

    הפרויקטים שלי בגיטהאב

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

כל הזכויות שמורות לרן בר-זיק ולאינטרנט ישראל | מדיניות הפרטיות של אתר אינטרנט ישראל | אתר אינטרנט ישראל נגיש לפי תקן WCAG 2.0 AA | הצהרת הנגישות של האתר | אבטחת מידע ודיווח על בעיית אבטחת מידע

גלילה לראש העמוד