Oracle创建表时遇ORA-00942错误求助:表或视图不存在
解决ORA-00942:创建表时提示“表或视图不存在”的问题
核心原因
你写的CREATE TABLE语句里,外键city_id NUMBER(4) REFERENCES cities(city_id)引用了cities表,但这个表要么还没创建,要么当前用户没有访问它的权限——这就是触发ORA-00942错误的直接原因。
分步解决方案
1. 先确认cities表是否存在
执行这条查询验证:
SELECT table_name FROM user_tables WHERE table_name = 'CITIES';
- 如果没返回结果,说明
cities表不存在,得先创建它。给你个基础示例:
CREATE TABLE cities ( city_id NUMBER(4) PRIMARY KEY, city_name VARCHAR(100) NOT NULL );
创建好cities之后,再执行你的customer1表创建语句就行。
2. 若cities已存在,检查权限与归属
如果cities表属于其他用户(比如sys或者别的业务用户),要做这两步:
- 查当前用户有没有
cities表的查询权限:
SELECT privilege FROM user_tab_privs WHERE table_name = 'CITIES';
- 要是没权限,找DBA给你授权:
GRANT SELECT ON cities TO 你的用户名;
- 或者直接在引用时加上用户前缀,比如
REFERENCES 其他用户名.cities(city_id)
3. 排查表名大小写问题
Oracle默认会把没加引号的表名转成大写存储,但如果创建cities时用了双引号(比如CREATE TABLE "cities"),那引用时必须保持大小写一致且加引号:
city_id NUMBER(4) REFERENCES "cities"(city_id)
额外提醒
你的mobile_nr用了NUMBER(9)类型,其实手机号更适合用VARCHAR2(9)——数字类型会丢失前导零,而且用CHECK(LENGTH(mobile_nr)=9)校验数字长度时,遇到带前导零的手机号会失效(比如012345678存成数字会变成12345678,长度就不对了)。
内容的提问来源于stack exchange,提问作者Marek K
相关产品推荐
相关产品推荐

