أحيانًا تشاهد خطأ ora-00942 عند تشغيل عبارة SQL. له عدة أسباب وكالعادة ، بناء جملة الخطأ ليس هو الأكثر وصفية. إذا كنت تواجه هذا وتريد معرفة كيفية إصلاح الخطأ ora-00942 ، فاقرأ.
حسب علمي ، هناك ثلاثة أسباب رئيسية لخطأ ora-00942:
- امتيازات المستخدم غير كافية
- الجدول أو العرض غير موجود بالفعل
- الجدول أو طريقة العرض في مخطط مختلف
سوف تظهر لك كيفية معالجة كل واحد.
إصلاح الخطأ ora-00942
أولا ، إخلاء قليلا. أنا لست ديسيبل ، وأنا مسؤول عن نظام ويندوز وأجهزة سطح المكتب والخادم. أعرف كيفية تشغيل SQL ولكن ليس بأي درجة من الخبرة وبالتأكيد ليس إلى المستوى الذي يمكنه استكشاف المشكلات وإصلاحها. كان علي أن أطلب من صديق أوراكل DBA أن يساعدني ، لذا بينما كتبت هذه القطعة ، فإن البتات الذكية هي كل ما لديه.
هذه القائمة التي تضم ثلاثة أسباب لخطأ ora-00942 ليست شاملة. يبدو أن هناك أسبابًا عشوائية أخرى لذلك ، لكن هذه الأسباب الثلاثة هي الأكثر شيوعًا.
امتيازات المستخدم غير كافية
أحد الأسباب الرئيسية لخطأ ora-00942 هو أن المستخدم ليس لديه امتيازات كافية للوصول إلى الجدول المطلوب. يمكنك التحقق من ذلك عن طريق تشغيل استعلامين.
- قائمة امتيازات النظام للمستخدم أو الدور SELECT * FROM dba_sys_privs WHERE الممنوح IN (& user_role، 'PUBLIC')؛
- قائمة امتيازات الكائن للمستخدم أو الدور
SELECT الممنوح ، مالك || '.' || table_name كائن ، امتياز ، قابل للامتحان FROM dba_tab_privs حيث الممنوح IN (& user_role) ORDER BY الممنوح ، المالك || '.' || table_name ،امتياز؛
سيخبرك هذان الشخصان إذا كان لدى المستخدم المعني الامتيازات الصحيحة لتشغيل الأمر. إذا كان لدى المستخدم الامتيازات الصحيحة ، فانتقل إلى التالي. إذا لم يكن لدى المستخدم الامتيازات الصحيحة ، فامنحها أو اطلب من مسؤول قاعدة البيانات لديك القيام بذلك.
يمكن أن يحدث خطأ ora-00942 أيضًا إذا كان مستخدم المخطط الذي تستخدمه لديه امتيازات INSERT ولكن ليس امتيازات SELECT. مرة أخرى ، تحقق من مستوى الامتياز وأضف SELECT إلى القائمة أو اطلب من مسؤول قاعدة البيانات القيام بذلك. على ما يبدو ، يجب منح امتياز SELECT المحدد لكل مخطط وإلا ستظل ترى الخطأ ora-00942.
الجدول أو العرض غير موجود بالفعل
يمكن أن يكون سبب الخطأ ora-00942 سبب بناء جملة استعلام غير صحيح أو إذا كان الجدول غير موجود. على الرغم من أن هذا يبدو المكان الأول المنطقي للبدء ، إلا أنني أؤكد تمامًا أن امتياز المستخدم هو السبب الأول للخطأ. الجدول غير موجود أو بناء جملة جدول خاطئ قيد الاستخدام هو الثاني.
للتحقق من وجود الجدول ، تحقق أولاً من بناء جملة الاستعلام. إذا كان بناء الجملة صحيحًا ، فقم بتشغيل هذا الاستعلام.
SELECT owner ، object_name ، object_type FROM all_objects WHERE object_type IN ('TABLE'، 'VIEW') AND object_name = 'YOUR_TABLE_NAME'؛
في السطر الأخير ، أدخل اسم الجدول الفعلي حيث ترى "YOUR_TABLE_NAME". يجب أن يخبرك هذا بالتأكيد ما إذا كان الجدول الذي تحاول الاستعلام موجودًا أم لا. إذا تم إرجاعه بدون جدول ، فلن يكون الجدول الذي تستعلمه موجودًا في المخطط أو قاعدة البيانات.
إذا كان لدى النظام الذي تستخدمه قائمة "جداول" ، فيمكنك البحث يدويًا عن الجدول إذا كنت تفضل ذلك ولكن الاستعلام أعلاه ينجز المهمة.
الجدول أو طريقة العرض في مخطط مختلف
إذا كان لدى المستخدم امتيازات وكان الجدول موجودًا ولا تزال تشاهد خطأ ora-00942 ، فمن المحتمل أن يكون ذلك بسبب المخطط. إذا كنت تدير مخططات متعددة ، فمن السهل تشغيل استعلام مقابل مخطط ليس لك. عندما تكون مشغولًا ومعارضًا ، فهذا خطأ بسيط.
تحقق من المخطط يدويًا إذا كنت تستطيع أو أضف اسم المخطط في سطر FROM من الاستعلام الخاص بك. إذا لم يكن لديك الامتيازات الصحيحة للمخطط الجديد ، فسترى الخطأ ora-00942 مرة أخرى. ارجع إلى إصلاح امتياز المستخدم الأول وتحقق من المخطط المقابل أو احصل على DBA للقيام بذلك نيابة عنك.
كما ذكر أعلاه ، لقد استشرت أحد أصدقائي Oracle DBA لي لهذه القطعة ، لذلك كل الفضل له في العمل الشاق. إذا وجدت أي أخطاء أو سهو هنا ، فهي أعمالي وحدها. اسمحوا لي أن أعرف في قسم التعليقات إذا فاتني أي شيء أو أخطأت وسأقوم بتصحيحه.
إذا كنت تعرف أي طريقة أخرى لإصلاح خطأ ora-00942 ، فأخبرنا بذلك أدناه!