לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי         אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #2  
ישן 22-07-2014, 09:34
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,303
בתגובה להודעה מספר 1 שנכתבה על ידי tal-tali שמתחילה ב "כתיבת trigger ב postgresql"

יוצרים פונקציה שמבצעת את הפעולה הרצויה (בתוך הפונקציה משתמשים ב SQL רגיל שיבצע מה שצריך, אני משער במקרה שלך, סכימה באמצעות SUM ושמירת הפלט של זה בתור טבלה אחרת, בהנחה שזו מטרתך?) - ואחרי יצירתה מחברים אליה trigger שפועל על AFTER INSERT ו EACH STATEMENT

יש כאן דוגמאות: http://michael.otacoo.com/postgresq...-for-beginners/

(צריך לשנות בהן את מתי ה trigger "יורה" כפי שכתבתי לעיל)

יש לשים לב, שהרבה יותר פשוט, כשרוצים את הסכום, פשוט לעשות SUM "במקום" - מה שיכסה כל סוג של שינוי בטבלה, כולל עדכונים ומחיקות. אחרת צריך לעשות טריגר לכל דבר, או שתהיה אי התאמה בין תוכן הטבלה המקורי לבין הסכום השמור בצד. באופן כללי, מדובר במידע כפול במסד הנתונים, שזה נגד כללי הנורמליזציה, שלרוב מוצדקים. נכון שיש שיקולים לאכסן את המידע יותר מפעם אחת (בעיקר: ביצועים במקרים מסויימים) - אבל צריך לחשוב פעמיים, לדעתי, לפני שעושים דברים כאלה - ולהבין מדוע עושים אותם.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #3  
ישן 23-07-2014, 13:06
  kkr3 kkr3 אינו מחובר  
 
חבר מתאריך: 24.02.06
הודעות: 3,210
מתוך דוקומנטציה של postgresql:
בתגובה להודעה מספר 1 שנכתבה על ידי tal-tali שמתחילה ב "כתיבת trigger ב postgresql"

//יצירת טבלה מסויימת

CREATE TABLE emp (
empname text,
salary integer,
last_date timestamp,
last_user text
);

//יצירת פונקציה(ניתן ליצור פונקצית C ,זה בשפת PSQL

CREATE FUNCTION emp_stamp() RETURNS trigger AS $emp_stamp$
BEGIN
-- Check that empname and salary are given
IF NEW.empname IS NULL THEN
RAISE EXCEPTION 'empname cannot be null';
END IF;
IF NEW.salary IS NULL THEN
RAISE EXCEPTION '% cannot have null salary', NEW.empname;
END IF;

-- Who works for us when she must pay for it?
IF NEW.salary < 0 THEN
RAISE EXCEPTION '% cannot have a negative salary', NEW.empname;
END IF;

-- Remember who changed the payroll when
NEW.last_date := current_timestamp;
NEW.last_user := current_user;
RETURN NEW;
END;
$emp_stamp$ LANGUAGE plpgsql;
//שיוך הפונקציה לטבלה, ואפיון האירוע בו תיקרא הפונקציה
CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp
FOR EACH ROW EXECUTE PROCEDURE emp_stamp();

השונה בDB זה מהאחרים הוא שצריך ליצור פה פונקציה ולשייך, במקום שטריגר יהווה ישות בפני עצמה...
לפתרון שלך, לא הייתי ממליץ להשתמש בטריגר, ניתן לעשות זאת ע"י OVER PARTITION, דוגמא,
SELECT EMPLOYEE_ID,SALARY,SUM(SALARY) OVER (PARTITION BY DEPARTMENT_ID)
FROM EMPLOYEES
אגב, אחלה DB, אנחנו משתמשים בו כסטנד-בי, הלוואי והיה בו PARALLEL
_____________________________________
-פעם היה מעט מידע ובאיכות, היום יש המון מידע ובשיטחיות.


נערך לאחרונה ע"י kkr3 בתאריך 23-07-2014 בשעה 13:15.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 03:36

הדף נוצר ב 0.11 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2019 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר