症状
查询报 ORA-00942: table or view does not exist,即便 DBA 确认该表存在。当应用以不同于模式属主的用户连接时尤为常见。
诊断
检查当前连接用户实际能看到什么:
SELECT owner, table_name FROM all_tables WHERE table_name = 'USERS';
SELECT * FROM all_tab_privs WHERE table_name = 'USERS';
在应用用户下无任何行,说明问题在可见性而非存在性。
修复
做限定或创建同义词,并授予权限:
CREATE SYNONYM app.users FOR core.users;
GRANT SELECT, INSERT, UPDATE, DELETE ON core.users TO app;
验证
以 app 用户执行原查询并返回行;all_tables 与 all_tab_privs 都确认该对象及其授权对该用户可见。