บางครั้งคุณพบข้อผิดพลาด ora-00942 เมื่อเรียกใช้คำสั่ง SQL มีสาเหตุบางประการและตามปกติไวยากรณ์ข้อผิดพลาดไม่ใช่คำอธิบายมากที่สุด หากคุณต้องการทราบปัญหานี้และต้องการทราบวิธีแก้ไขข้อผิดพลาด ora-00942 โปรดอ่านต่อ
เท่าที่ฉันรู้มีสามสาเหตุหลักของข้อผิดพลาด ora-00942:
- สิทธิ์ผู้ใช้ไม่เพียงพอ
- ตารางหรือมุมมองไม่ได้มีอยู่จริง
- ตารางหรือมุมมองอยู่ใน 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 โปรดแจ้งให้เราทราบด้านล่างนี้!