מדי פעם אתה רואה שגיאה ora-00942 בעת הפעלת הצהרת SQL. יש לו כמה סיבות וכרגיל, תחביר השגיאה אינו התיאורי ביותר. אם אתה עומד נגד זה ורוצה לדעת כיצד לתקן את השגיאה ora-00942, המשך לקרוא.
עד כמה שידוע לי, ישנם שלושה גורמים עיקריים לשגיאה ora-00942:
- הרשאות משתמש אינן מספיקות
- הטבלה או התצוגה לא קיימים בפועל
- הטבלה או התצוגה נמצאים בסכימה אחרת
אני אראה לך כיצד לפנות לכל אחת.
תקן את השגיאה ora-00942
דבר ראשון, מעט ויתור. אני לא DBA, אני מנהל מערכת של Windows וטכנולוגיית מחשבים שולחניים ושרתים. אני יודע להפעיל SQL אך לא במידה מסוימת של מומחיות ובטח שלא ברמה שיכולה לפתור בעיות. הייתי צריך לבקש מחבר Oracle DBA שלי לעזרה, אז בזמן שכתבתי את הקטע הזה, הקטעים החכמים הם כולם שלו.
רשימה זו של שלושה גורמים לשגיאה ora-00942 אינה ממצה. יש ככל הנראה גורמים אקראיים נוספים לכך אך שלושת אלה הם ככל הנראה הנפוצים ביותר.
הרשאות משתמש אינן מספיקות
אחת הסיבות העיקריות לשגיאת ora-00942 היא שלמשתמש אין הרשאות מספיקות לגישה לטבלה המדוברת. אתה יכול לבדוק זאת על ידי הפעלת שתי שאילתות.
- רשום הרשאות מערכת למשתמש או לתפקיד SELECT * FRA dba_sys_privs WHITE המענק ב (& user_role, 'PUBLIC');
- רשימת הרשאות אובייקט למשתמש או לתפקיד
בחר מעניק בעלים, בעלים || '.' || אובייקט table_name, הרשאה, ניתן מ dba_tab_privs איפה המוענק ב (& user_role) הזמנה לפי המענק, הבעלים || '.' || table_name, הרשאה;
שני אלה יגידו לך אם למשתמש המדובר יש הרשאות נכונות להפעיל את הפקודה. אם למשתמש יש הרשאות נכונות, עבור אל הבא. אם למשתמש אין את ההרשאות הנכונות, הענק להם אותם או בקש ממנהל ה- DB שלך לעשות זאת.
השגיאה ora-00942 יכולה להתרחש גם אם למשתמש הסכימה בה אתה משתמש יש הרשאות INSERT אך לא SELECT הרשאות. שוב, בדוק את רמת ההרשאות והוסף את SELECT לרשימה או בקש ממנהל DB לעשות זאת. ככל הנראה, יש להעניק את ההרשאה SELECT הספציפית לכל סכימה אחרת, עדיין תראה את השגיאה ora-00942.
הטבלה או התצוגה לא קיימים בפועל
סיבה זו לשגיאה ora-00942 יכולה להיגרם על ידי תחביר שאילתה שגוי או אם הטבלה אינה קיימת. אף על פי שזה נראה המקום הראשון ההגיוני להתחיל, אני בטוח כי אמינות הרשאות המשתמש היא הגורם הראשון לשגיאה. הטבלה שאינה נמצאת שם או שהתחביר השולחן הלא נכון שמשתמש בה הוא שני.
כדי לבדוק אם הטבלה קיימת, בדוק תחילה את התחביר של השאילתה. אם התחביר נכון, הפעל שאילתה זו.
בחר בעל, object_name, object_type מ- all_objects WHERE object_type IN ('TABLE', 'VIEW') ו- object_name = 'YOUR_TABLE_NAME';
בשורה האחרונה ההיא, הכנס את שם הטבלה בפועל במקום בו אתה רואה את 'YOUR_TABLE_NAME'. זה אמור לומר לך בהחלט אם הטבלה שאתה מנסה לבצע שאילתה קיימת או לא. אם הוא חוזר ללא טבלה, הטבלה שאתה מבקש אינה קיימת בסכימה או בבסיס הנתונים.
אם למערכת בה אתה משתמש יש תפריט טבלאות, אתה יכול לבדוק ידנית אם הטבלה מעדיפה, אך השאילתה שלמעלה מסיימת את העבודה.
הטבלה או התצוגה נמצאים בסכימה אחרת
אם למשתמש יש הרשאות והטבלה קיימת ואתה עדיין רואה את השגיאה ora-00942, סביר להניח שהוא יורד לסכימה. אם אתה מנהל סכמות מרובות, קל להריץ שאילתה כנגד סכמה שאינה שלך. כשאתה עסוק ומתנגד לזה, זו שגיאה פשוטה לבצע.
בדוק את הסכימה ידנית אם אתה יכול או להוסיף את שם הסכימה בשורה FROM בשאילתה שלך. אם אין לך את ההרשאות הנכונות לסכימה החדשה, תראה את השגיאה ora-00942 פעם נוספת. חזור לתיקון הרשאות המשתמש הראשון ובדוק את הסכימה המתאימה או קבל את DBA שלך לעשות את זה בשבילך.
כאמור, התייעצתי עם חבר Oracle DBA שלי לגבי הקטע הזה, אז כל הכבוד לו על העבודה הקשה. אם אתה מוצא כאן שגיאות או השמטות, הן שלי בלבד. תודיעו לי בקטע התגובות אם התגעגעתי למשהו או טעיתי ואני אתקן זאת.
אם ידוע לך על דרך אחרת לתקן את השגיאה ora-00942, ספר לנו עליה בהמשך!