› פורומים › אפיון ופיתוח פריוריטי › קוד לחישובי תאריך על עמודה לפי שורות
- This topic has 8 תגובות, 2 משתתפים, and was last updated לפני 14 שנים, 8 חודשים by אורן קפלן.
- Post
-
- מרץ 16, 2010 בשעה 5:11 pm
בתגובה להודעה של ליאור ב: פונקציה שתציג לי תאריך שנה קדימהמצ"ב זיפ עם הקוד של הפרוצדורה בטקסט והשגיאה שיוצאת בהכנה בHTML.
אני רוצה לכתוב קוד שיחשב מחדש את התאריך התאורטי של ההזמנה האחרונה שהיינו חושבים שבו לקוח יקנה מאיתנו מוצר על פי תחזית נתונה.
את עמודות התחזית ועמודת התאריך הוספתי לטבלת מוצרי לקוח.
למעשה הכל עבד טוב עד שהחלטתי שאין סיבה שהקוד ישב בהכנת הדו"ח בעמודה ספציפית ולא בפרוצדורה המכינה אותו.בנוסף על הבעייה שעולה בהכנה כרגע, הקוד לפונקציה המוזכרת בהודעה למעלה לא עבד לי בסביבת פיתוח SQL ונתן לי את אותה השגיאה שהופיעה למיכאל בהודעה הרלוונטית.
אשמח לקבל תגובות והערות גם על שאר הקוד.
ההערות שהוספתי בתוכו אמורות להסביר אותו בצורה סבירה.תודה
אורן [file name=myproc.zip size=5900]https://www.priority-forums.com/he/images/fbfiles/files/myproc.zip[/file]
- Replies
-
- מרץ 17, 2010 בשעה 1:37 am
הי אורן
זה לא קשור להוספת התאריך יש בעיה בקוד: לדוגמא:
[code:1]SELECT * INTO :$.SNG FROM :$.CUT WHERE ( :$.CUT.LINE = :I ) ;[/code:1]זה קוד לא נכון ה FROM שלך לא פונה לטבלה אלא למשתנה בשם CUT וזה סינטקס לא חוקי.
ראיתי עוד כמה נקודות בעייתיות לדוגמא הביטויים:
:$.SNG.CUSTNAME, :$.SNG.UNITבוא נתחיל בלהעביר את הקוד שלך הכנה לפני הטיפול בתאריך.
אגב גם האתחול שלו לא נכון. צריך להיות: (24:00*(DAY( SQL.DATE ) + 1) כדי להוריד את מספר הימים לתחילת השבוע.- מרץ 17, 2010 בשעה 7:34 pm
זו בדיוק הנקודה הבעייתית – חשבתי שאם אעבוד עם משתנה מסוג קובץ אז אוכל לקחת ממנו שורות.אם אני עושה LINK לטבלה מסויימת, ועושה מניפולציות (כמו לעבור על שורות בתוצאה שלי) אני לא מקבל מידע שמתעדכן תוך כדי ריצת הפרוצדורה, נכון? אני עובד רק על העותק שעשיתי בשורה של הLINK….
אוקיי, יש לי שני רעיונות – הראשון והפחות "יפה" הוא לחזור על חיתוך עבור כל יחידת זמן מחזור ולבצע את המניפולציה על שדה התאריך של כל התוצאה.
השני, היותר יפה, וכנראה יותר איטי, הוא לחתוך שורה-שורה כל פעם ורק עליה לבצע מניפולציה, בלי לעבור באמצע בטבלת ביניים כמו שחשבתי לעשות.מה אתם אומרים?
אורן
- מרץ 18, 2010 בשעה 12:05 am
אורן,
אחרי ביצוע לינק הפניה לטבלה נעשית בדיוק באותו סינטקס כמו לטבלה המקורית . אלא שהמערכת מתייחסת לטבלה הזמנית עד אשר אתה מבצע UNLINK.- מרץ 21, 2010 בשעה 3:11 pm
אוקיי – אז אשאל אחרת.
אני עושה לינק לטבלאות.
אחר כך אני חותך עם מיון ומספור.
הגישה שלי לשדה המספור בכדי לראות באיזה שורה אני מהטבלה הזמנית נעשית כרגיל? או שאני צריך לעשות חיתוך ומיון יותר מתקדמים ולחשב עבור "כל הטבלה" כל פעם עבור סוג אחר של חישוב?- מרץ 22, 2010 בשעה 12:50 am
אורן.
אני לא כ"כ מבין מה כוונתך.
אני מציע שניקח יחד איזה משימה קטנטונת שיש לך לביצוע. אני אקודד אותה. ונסביר את הקוד לשנינו., אני מניח שגם חברים אחרים יוכלו להפיק תועלת. מה דעתך ?- מרץ 22, 2010 בשעה 10:26 am
היי ליאור,
אני אסביר את עצמי, למרות שאני חושב שאחת הגישות פשוט שגויה ולא מתאימה לעבודה עם בסיסי נתונים. בכל מקרה אסיים היום לקודד בדרך ה'נכונה' ונראה מה זה נותן.
אם אחר כך אצטרך עזרה עם זה נעבוד בשיטה שלך, של 'פרה-פרה', שתעזור אני חושב לכולם 🙂העניין הוא כזה.
האופציה הראשונה (ולדעתי הלא נכונה ואולי גם בלתי אפשרית) של לעבוד עם טבלאות חיות הוא לעשות עותק שלהן בלינק ולחתוך את העותקים בסלקט לתוך טבלה זמנית ממוספרת. אחר כך להעביר את השורות, אחת אחת לפי המספרים, בכל האלגוריתם של החישוב לפי יחידת הזמן של המחזור.
האופציה השניה (וכנראה היחידה האפשרית מבין אלו שהעליתי, פרט ללהכניס את כל החישובים לעמודה בדו"ח), היא בהתחלה נורא דומה: לעשות עותק שלהן בלינק.
ההבדל המשמעותי כאן הוא שעבור כל אופציית חישוב (כלומר עבור כל יחידת זמן רלוונטית) צריך לחתוך מחדש את העותקים עם תנאי המגביל את יחידות הזמן ליחידה המתאימה באמצעות סלקט.לפי ההבנה שלי את המערכת עד לפני שבוע לא הייתה שום מניעה שאוכל להכין עותק של הטבלאות, לחתוך לטבלה זמנית נוספת, לקחת ממנה כל פעם שורה זמנית עליה אבצע את החישוב שאכניס כל פעם חזרה לשורה התואמת בטבלה המקורית לפי החיתוכים של הרלוונטיים. כאן הייתה השגיאה שלי – או שחותכים טבלה, או שחותכים שורה – כל חיתוך למעשה מבטל את הקודם מכיוון שזו המשמעות של סלקט. בוחרים קבוצת מידע לפי חיתוך מסויים.
קצת יותר ברור?
בכל אופן אעלה את הקוד המתוקן יותר מאוחר היום, אם הוא יעבוד ואם לא.
תודה!
אורן
- מרץ 22, 2010 בשעה 12:53 pm
שאלה לבינתיים…פונקציות של מניפולציה של מידע מופעלות רק על משתנים יחידים או גם על משתנים שמייצגים עמודות של מידע כמו שדות?
אורן
- מרץ 22, 2010 בשעה 6:25 pm
שוב שלום,
מצ"ב קובץ ZIP עם הקבצים של 'סביבת פיתוח SQL'.
עשיתי DUMP לפרוצדורה וניסיתי לעשות אופטימיזציה לקוד, לראות אם הוא בכלל לוקח אותו לאנשהו…
הוא מסרב בתוקף ונותן לי שגיאה שאני לא ככ יודע מה לעשות איתה שמופיעה גם היא בקובץ המצורף.
IN – הקוד מהDUMP, כשהכנסתי את הקריאות לפונקציות להערות.
OPT – תוצאות אופטימיזציה.
ERR – השגיאה.
BAK – כנראה ה'IN' הקודם.מקווה שהצלחתי להסביר מה הבעיה.
תודה
אורן [file name=file.zip size=5340]https://www.priority-forums.com/he/images/fbfiles/files/file.zip[/file]
- יש להתחבר למערכת על מנת להגיב.