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

לוגיקה מתקדמת עם PL/pgSQL

פונקציות שנכתבו ב-LANGUAGE sql יכולות להריץ שאילתות סטנדרטיות בזו אחר זו. אם היינו צריכים משהו יותר מתקדם כמו "אם הסכום שהוזן גדול מ-100 אז תחיל הנחה", SQL חשוף לא יכול לעשות זאת בעצמו. עלינו להשתמש ב-PL/pgSQL, שפת תכנות פרוצדורלית מלאה המובנית ב-Postgres.

ב-PL/pgSQL נוסיף את הגופים הקלאסיים העשויים מ-BEGIN .. END, משתנים והצהרות מותנות.

SQL
CREATE OR REPLACE FUNCTION valuta_cliente(ordini INTEGER)
RETURNS TEXT AS $$
BEGIN
  IF ordini > 10 THEN
    RETURN 'VIP';
  ELSE
    RETURN 'Standard';
  END IF;
END;
$$ LANGUAGE plpgsql;

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

נסה זאת בעצמך

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

אנו רוצים פונקציה מורכבת שתחליף את עצמה אם היא כבר קיימת ('get_price_label'), מקבלת 'price' בתור NUMERIC ומחזירה TEXT מילולי.\nהשתמש ב-PL/pgSQL. פתח את BEGIN.\nכתוב את ההיגיון: אם המחיר הוא > 100.00 החזר את המחרוזת 'Premium'. ELSE החזירו 'Economico'.\nסגור את ה-END המותנה; ואת הגוף.

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

CREATE OR REPLACE FUNCTION get_price_label(price NUMERIC) מחזיר טקסט כ$$ BEGIN IF price > 100.00 ואז החזר 'Premium'; ELSE RETURN 'Economico'; END IF; סוֹף; $$ LANGUAGE plpgsql;

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

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

אתה יכול להכריז על משתנים זמניים לפני BEGIN עם מילת המפתח DECLARE.\nכתוב פונקציה 'saluta_utente(userid INTEGER)' -> מחזירה TEXT, PL/pgSQL logic.\nבתוכה הכרזה על משתנה מחרוזת 'nome_utente TEXT;'.\nלאחר מכן, בתוך BEGIN, אכלס את המשתנה המיוחד עם 'שם_המיוחד' באמצעות 'שם_קודם'. סעיף 'SELECT first_name INTO nome_utente FROM... WHERE id = userid'. לבסוף, RETURN משרשרת את המשתנה ל'Ciao '.

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

DECLARE nome_utente TEXT; \nBEGIN SELECT first_name INTO nome_utente... \nהחזר 'Ciao ' || nome_utente;

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