sql server 2000 בדיקת קוד ת.ז

sql server 2000 בדיקת קוד ת.ז

מתוך שאילתא. שלום, יש לי פרוצדורה המקבלת מחרוזת בת 9 ספרות. הפרוצדורה מחשבת ספרת ביקורת של תעודת הזיהוי בכך שהיא עוברת על כל סיפרה במחרוזת, שולחת אותה לפונקציה המכפילה את הסיפרה ב 1 או 2 , מחברת את תוצאת ההכפלה ומחזירה מכפלה על כל סיפרה ששולחת לה הפרוצדורה. הפרוצדורה מסכמת את כל המכפלות שמחזירה הפונקציה, מחסירה את סיפרת היחידות של המספר שהוא סך המכפלות מ 10 וכך אני מקבל סיפרת ביקורת כשרה למהדרין. השאלה היא: "במה הועילו חכמים בתקנתם". אני רוצה להריץ את הפרוצדורה הזו שכשלעצמה מפעילה פונקציה, על כל טור ה ת.ז בטבלה בשאילתא אך אין לי מושג כיצד. הקוד שאני רואה בעיני רוחי הוא משהו מעין:
select checkid(id) from my table​
לכאורה אין פסול בשאילתא אבל הבעיה היא שאין לי פונקציה כזו. יש לי פרוצדורה המפעילה פונקציה. לא נראה לי שיהיה זה נכון לכתוב פונקציה אחת המפעילה פונקציה שניה ("מקרוני"). מישהו יכול לעזור לי בבעיה זו ? ליתר ביטחון אני מציג את הפרוצדורה שכתבתי ואת פונקציית העזר כנגדה:
/*EXEC call_function1 '99999999'*/ ALTER PROCEDURE call_function1 @id_number VARCHAR(9) AS BEGIN TRANSACTION DECLARE @codigit INTEGER SET @codigit= dbo.function1(CAST(SUBSTRING(@id_number,8,1) AS INTEGER), 2)+ dbo.function1(CAST(SUBSTRING(@id_number,7,1) AS INTEGER), 1)+ dbo.function1(CAST(SUBSTRING(@id_number,6,1) AS INTEGER), 2)+ dbo.function1(CAST(SUBSTRING(@id_number,5,1) AS INTEGER), 1)+ dbo.function1(CAST(SUBSTRING(@id_number,4,1) AS INTEGER), 2)+ dbo.function1(CAST(SUBSTRING(@id_number,3,1) AS INTEGER), 1)+ dbo.function1(CAST(SUBSTRING(@id_number,2,1) AS INTEGER), 2)+ dbo.function1(CAST(SUBSTRING(@id_number,1,1) AS INTEGER), 1) DECLARE @toCheck INTEGER SET @toCheck=10-(@coDigit%10) PRINT @toCheck COMMIT​
זוהי הפונקציה:
ALTER FUNCTION function1 (@myDigit INTEGER, @myMultiplier INTEGER) RETURNS INTEGER AS BEGIN DECLARE @laStep INTEGER DECLARE @firStep INTEGER SET @firStep=@myDigit*@myMultiplier IF(@firStep< 10) SET @laStep=@firStep ELSE BEGIN DECLARE @firStdig INTEGER SET @firStdig=@firStep/10 DECLARE @seconDig INTEGER SET @seconDig=@firStep%10 SET @laStep=@firStdig+@seconDig END RETURN @laStep END​
תודה !
 

גרי רשף

New member
לחינם אתה מסתבך

הפונקציה השניה נועדה להחזיר לך את ספרת היחידות מהמכפלה, כלומר- אם המכפלה היא 16 הפונקציה תחזיר 6. למה כל התסבוכת הזו? חישוב ספרת הביקורת יגיע לאותה תוצאה גם אם תוסיף 16 במקום 6.. חוץ מזה- אין איסור על הפעלת פונקציה מתוך פונקציה..
 
ראשית אני מודה לך

סוגיית ביטול הסיפרה העשרונית אין לה חשיבות מבחינתי מה שחשוב זה אם לכתוב "פונקציה קוראת לפונקציה" (ספגטי) או שישנה דרך מוצלחת יותר ומתשובתך אני למד שאצטרך לעבוד עם שתי פונקציות ואני מודה לך על תשובתך.
 

גרי רשף

New member
כן ולא

כן = זה אפשרי ואין עם זה שום בעייה. אני מבין שהמונח "ספגטי" מתייחס לפונקציה הקוראת לפונקציה הקוראת לפונקציה וכו', עד שהמתכנת מאבד את הקשר ואינו זוכר מאין בא ולאן הלך (כמו בשיר ילדים ידוע). לא = למה אתה צריך את הפונקציה השניה? קח את הספרה, הכפל אותה ב-1 או ב-2, והוסף לסכום. אינך צריך לכתוב פונקציה כדי להכפיל שני מספרים..
 
למעלה