תוך כדי כתיבת הפעלת מסך, נתקלתי במצב בו רציתי לבדוק אם קיימת רשומה בטבלה כלשהי. אם הרשומה קיימת, ההפעלה היתה צריכה להוציא הודעה ולקפוץ אל סוף הקוד. משהו בסגון זה
GOTO 1 WHERE NOT EXISTS (SELECT 1 FROM ORDERS
WHERE TEST_XX = :$.CC);
WRNMSG 5001;
GOTO 100;
LABEL 1;
... כאן מופיע הקוד שאני רוצה שיתבצע ...
LABEL 100;
לא ניתן להשתמש ב-ERRMSG כיון שמדובר בהפעלה וקוד כלשהו אחר עלול לא להתבצע.
באופן מקרי גיליתי הבוקר פתרון הרבה יותר אלגנטי, אותו אני רוצה להציג בפניכם. הפתרון משתמש בשני משתנים שאינם מתועדים.
SELECT 5001, 100 INTO :WRNMSG, :GOTO
FROM ORDERS
WHERE TEST_XX = :$.CC
או במילים אחרות – אם יש רשומה כלשהי בטבלת ORDERS בה השדה TEST_XX שווה למשתנה המסך CC, אז הצג הודעת שגיאה 5001 ותקפוץ אל תווית 100.
אהבתי, אבל מה קורה אם זה לא עומד בתנאי?
אתה מאחסן ערכים אחרים במשתנים האלו ואז מקסימום הם נשארים כמו הקודם?
ואח"כ אתה עושה:
GOTO :GOTO
WRNMSG :WRNMSG
?