דילוג לתוכן המרכזי
מודול 12 · שיעור 1 מתוך 445/57 בקורס~15 min
שיעורי מודול (1/4)

UDFs ו-SQL בסיסי

עד כה שלחנו שאילתות משרת Node.js. אבל אם משתמשים בנוסחה בעשרות שאילתות שונות (למשל חישוב המחיר הסופי כולל מע"מ), למה לשכפל את המתמטיקה ב-JavaScript? פונקציות SQL (פונקציות בהגדרת משתמש - UDF) מאפשרות לנו ליצור "מאקרו" בתוך ה-DB עצמו.

הנה איך ליצור מאקרו SQL מתמטי:

SQL
CREATE OR REPLACE FUNCTION calculate_tax(price NUMERIC)
RETURNS NUMERIC AS $$
  SELECT price * 1.22;
$$ LANGUAGE sql;

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

SQL
SELECT name, calculate_tax(unit_price) AS price_with_tax FROM products;

יצירה דינמית

נוכל להגדיר כמה משתנים שנרצה, לציין את סוגיהם, ו-LANGUAGE sql יריץ את השאילתה ויחזיר באופן מרומז את ההצהרה האחרונה שממוקמת בין סימני הדולר $$.

נסה זאת בעצמך

פעילות גופנית#sql.m12.l1.e1
ניסיונות: 0טוען...

צור פונקציה פשוטה הניתנת להתקשרות בשם 'get_full_name' שמקבלת שני פרמטרים של TEXT ('first_name' TEXT, 'last_name' TEXT).\nהיא חייבת להחזיר ערך TEXT.\nבפנים, בצע SELECT טריוויאלי שמשרשר את שני הארגומנטים עם רווח אחד ביניהם, והכריז עליו כשפה sql.

טוען עורך...
הצג רמז

CREATE OR REPLACE FUNCTION get_full_name(שם_שם TEXT, שם_שם טקסט) מחזיר טקסט כ-$$ SELECT first_name || ' ' || שם_משפחה; $$ LANGUAGE sql;

הפתרון זמין לאחר 3 ניסיונות

פעילות גופנית#sql.m12.l1.e2
ניסיונות: 0טוען...

ב-UDF מתקדמים יותר נוכל להטמיע שאילתות שלמות. צור פונקציה 'get_customer_count()' שאינה מקבלת פרמטרים ומחזירה מספר שלם.\nבפנים, הפעל 'SELECT COUNT(id) FROM customers' טריוויאלי.\nהכרז על זה כשפת SQL טהורה.

טוען עורך...
הצג רמז

היזהרו: COUNT מחזיר ביגינט, העבר אותו ל INTEGER כדי להתאים לסוג ההחזרה! CREATE OR REPLACE FUNCTION get_customer_count() מחזיר מספר שלם AS $$ SELECT CAST(COUNT(id) AS INTEGER) מלקוחות; $$ LANGUAGE sql;

הפתרון זמין לאחר 3 ניסיונות