Anonim

คุณเห็นข้อผิดพลาด ora-00942 เป็นครั้งคราวเมื่อเรียกใช้คำสั่ง SQL มันมีสาเหตุเล็กน้อยและตามปกติไวยากรณ์ข้อผิดพลาดไม่ได้อธิบายมากที่สุด หากคุณกำลังทำสิ่งนี้อยู่และต้องการทราบวิธีแก้ไขข้อผิดพลาด ora-00942 ให้อ่านต่อ

เท่าที่ฉันรู้มีสามสาเหตุหลักของข้อผิดพลาด ora-00942:

  1. สิทธิ์ผู้ใช้ไม่เพียงพอ
  2. ตารางหรือมุมมองไม่มีอยู่จริง
  3. ตารางหรือมุมมองอยู่ในสคีมาที่แตกต่างกัน

ฉันจะแสดงวิธีการที่อยู่แต่ละคน

แก้ไขข้อผิดพลาด ora-00942

ก่อนอื่นข้อจำกัดความรับผิดชอบเล็กน้อย ฉันไม่ใช่ DBA ฉันเป็นผู้ดูแลระบบ Windows และเทคโนโลยีเดสก์ท็อปและเซิร์ฟเวอร์ฮาร์ดแวร์ ฉันรู้วิธีเรียกใช้ SQL แต่ไม่ถึงระดับความเชี่ยวชาญใด ๆ และแน่นอนไม่ถึงระดับที่สามารถแก้ไขปัญหาได้ ฉันต้องขอ Oracle DBA เพื่อนของฉันขอความช่วยเหลือดังนั้นในขณะที่ฉันเขียนชิ้นนี้บิตฉลาดเป็นของเขาทั้งหมด

รายการสาเหตุสามข้อของข้อผิดพลาด ora-00942 นี้ไม่ครบถ้วนสมบูรณ์ เห็นได้ชัดว่ามีสาเหตุสุ่มอื่น ๆ ของมัน แต่ทั้งสามคนนี้เป็นสาเหตุที่พบบ่อยที่สุด

สิทธิ์ผู้ใช้ไม่เพียงพอ

สาเหตุหลักประการหนึ่งของข้อผิดพลาด ora-00942 คือผู้ใช้ไม่มีสิทธิ์เพียงพอในการเข้าถึงตารางที่เป็นปัญหา คุณสามารถตรวจสอบสิ่งนี้ได้ด้วยการเรียกใช้สองแบบสอบถาม

- แสดงสิทธิ์ของระบบสำหรับผู้ใช้หรือบทบาท SELECT * จาก dba_sys_privs WHERE ผู้รับสิทธิ์ใน (& user_role, 'สาธารณะ');

- แสดงสิทธิ์ของออบเจกต์สำหรับผู้ใช้หรือบทบาท

SELECT ผู้รับ, เจ้าของ || '.' | | วัตถุ table_name, สิทธิพิเศษ, ที่ได้รับจาก dba_tab_privs ที่ซึ่งผู้รับสิทธิ์ IN (& user_role) เรียงตามผู้รับสิทธิ์, เจ้าของ || '| | table_name, สิทธิ์;

ทั้งสองนี้จะบอกคุณว่าผู้ใช้ที่มีปัญหานั้นมีสิทธิ์ที่ถูกต้องในการรันคำสั่งหรือไม่ หากผู้ใช้มีสิทธิ์ที่ถูกต้องให้ย้ายไปยังถัดไป หากผู้ใช้ไม่มีสิทธิ์ที่ถูกต้องให้พวกเขาหรือขอให้ผู้ดูแลฐานข้อมูลของคุณทำ

ข้อผิดพลาด ora-00942 ยังสามารถเกิดขึ้นได้หากผู้ใช้ของสคีมาที่คุณใช้มีสิทธิ์ INSERT แต่ไม่ใช่สิทธิ์ของ SELECT ตรวจสอบระดับสิทธิ์อีกครั้งและเพิ่ม SELECT ในรายการหรือขอให้ผู้ดูแลฐานข้อมูลดำเนินการ เห็นได้ชัดว่าจะต้องให้สิทธิ์ SELECT เฉพาะกับแต่ละสคีมามิฉะนั้นคุณจะยังเห็นข้อผิดพลาด ora-00942

ตารางหรือมุมมองไม่มีอยู่จริง

สาเหตุของข้อผิดพลาด ora-00942 นี้อาจเกิดจากไวยากรณ์เคียวรีไม่ถูกต้องหรือหากไม่มีตารางอยู่ แม้ว่าสิ่งนี้จะเป็นจุดเริ่มต้นที่สมเหตุสมผลในการเริ่มต้นฉันมั่นใจได้อย่างมั่นใจว่าสิทธิ์ของผู้ใช้เป็นสาเหตุอันดับหนึ่งของข้อผิดพลาด ตารางที่ไม่ได้อยู่ที่นั่นหรือไวยากรณ์ของตารางที่ใช้ไม่ถูกต้องเป็นที่สอง

หากต้องการตรวจสอบว่ามีตารางอยู่ก่อนอื่นให้ตรวจสอบไวยากรณ์ของแบบสอบถาม หากไวยากรณ์ถูกต้องให้เรียกใช้คิวรีนี้

เจ้าของ SELECT, object_name, object_type จาก all_objects WHERE object_type ใน ('ตาราง', 'ดู') และ object_name = 'YOUR_TABLE_NAME';

ในบรรทัดสุดท้ายนั้นให้แทรกชื่อตารางจริงที่คุณเห็น 'YOUR_TABLE_NAME' สิ่งนี้ควรบอกคุณอย่างแน่นอนว่าตารางที่คุณพยายามสืบค้นมีอยู่หรือไม่ ถ้ามันกลับมาโดยไม่มีตารางตารางที่คุณกำลังสอบถามไม่มีอยู่ในสคีมาหรือฐานข้อมูล

หากระบบที่คุณใช้มีเมนู Tables คุณสามารถตรวจสอบตารางด้วยตนเองได้หากคุณต้องการ แต่การค้นหาข้างต้นทำให้งานเสร็จ

ตารางหรือมุมมองอยู่ในสคีมาที่แตกต่างกัน

หากผู้ใช้มีสิทธิ์ใช้งานและมีตารางอยู่และคุณยังคงเห็นข้อผิดพลาด ora-00942 แสดงว่ามีความเป็นไปได้ที่จะถึงสคีมา หากคุณกำลังจัดการหลายสกีมามันเป็นเรื่องง่ายที่จะเรียกใช้แบบสอบถามกับสคีที่ไม่ใช่ของคุณ เมื่อคุณไม่ว่างและขัดต่อมันเป็นข้อผิดพลาดง่าย ๆ ที่จะทำ

ตรวจสอบสคีมาด้วยตนเองหากคุณสามารถหรือเพิ่มชื่อสคีมาในบรรทัด FROM ของคิวรีของคุณ หากคุณไม่มีสิทธิ์ที่ถูกต้องสำหรับสคีมาใหม่คุณจะเห็นข้อผิดพลาด ora-00942 อีกครั้ง กลับไปที่การแก้ไขสิทธิ์ของผู้ใช้รายแรกและตรวจสอบสคีมาที่เกี่ยวข้องหรือรับ DBA ของคุณเพื่อทำเพื่อคุณ

ดังที่ได้กล่าวไว้ข้างต้นฉันได้ปรึกษากับ Oracle DBA ที่เป็นเพื่อนสนิทของฉันสำหรับงานชิ้นนี้เพื่อให้เครดิตกับเขาสำหรับการทำงานหนักทั้งหมด หากคุณพบข้อผิดพลาดหรือการละเว้นที่นี่พวกเขาเป็นของฉันคนเดียว แจ้งให้เราทราบในส่วนความคิดเห็นหากฉันพลาดอะไรหรือทำผิดและฉันจะแก้ไขให้ถูกต้อง

หากคุณทราบวิธีอื่นใดในการแก้ไขข้อผิดพลาด ora-00942 โปรดบอกเราเกี่ยวกับสิ่งนี้ด้านล่าง!

วิธีแก้ไขข้อผิดพลาด ora-00942