שיעורי מודול (1/4)
UDFs ו-SQL בסיסי
עד כה שלחנו שאילתות משרת Node.js. אבל אם משתמשים בנוסחה בעשרות שאילתות שונות (למשל חישוב המחיר הסופי כולל מע"מ), למה לשכפל את המתמטיקה ב-JavaScript? פונקציות SQL (פונקציות בהגדרת משתמש - UDF) מאפשרות לנו ליצור "מאקרו" בתוך ה-DB עצמו.
הנה איך ליצור מאקרו SQL מתמטי:
CREATE OR REPLACE FUNCTION calculate_tax(price NUMERIC)
RETURNS NUMERIC AS $$
SELECT price * 1.22;
$$ LANGUAGE sql;ברגע שהפקודה הזו פועלת, הפונקציה חיה לנצח במסד הנתונים שלנו. ניתן להתקשר אליו מכל שאילתה:
SELECT name, calculate_tax(unit_price) AS price_with_tax FROM products;יצירה דינמית
נוכל להגדיר כמה משתנים שנרצה, לציין את סוגיהם, ו-LANGUAGE sql יריץ את השאילתה ויחזיר באופן מרומז את ההצהרה האחרונה שממוקמת בין סימני הדולר $$.
נסה זאת בעצמך
צור פונקציה פשוטה הניתנת להתקשרות בשם '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 ניסיונות
ב-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 ניסיונות