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

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

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

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

ฉันจะแสดงให้คุณเห็นวิธีแก้ปัญหาแต่ละข้อ

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

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

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

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

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

 - สิทธิ์ระบบรายการสำหรับผู้ใช้หรือบทบาท SELECT * จาก dba_sys_privs WHERE grantee IN (& user_role, 'PUBLIC'); 

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

 SELECT ผู้รับผู้รับ || '.' || table_name object, privilege, grantable FROM dba_tab_privs WHERE ผู้รับสิทธิ IN (& user_role) ORDER BY ผู้รับสิทธิ์ || '.' || table_name, privilege; 

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

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

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

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

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

 เจ้าของ SELECT, object_name, object_type FROM all_objects โดยที่ object_type IN ('TABLE', 'VIEW') และ object_name = 'YOUR_TABLE_NAME'; 

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

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

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

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

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

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

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

ดูเพิ่มเติมที่