目录

问题

原因

解决方法

综述

1、创建个测试表

2、验证查询

2.1 表名带双引号查询:

2.2 表名不带双引号查询:

3、快速修复

3.1 生成修复语句

3.2 执行修复语句

3.3 验证修复结果

总结


问题

Oracle数据库,新建表,或者从其它数据导入后,查询出现“表或视图不存在”

### The error may involve com.menet.cloud.mapper.sysfront.MnFrontMenuMapper.selectListByParam-Inline
### The error occurred while setting parameters
### SQL: SELECT count(0) FROM MN_FRONT_MENU A WHERE (A.DEL_FLAG = 0)
### Cause: java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在

原因

搜索了一下,原因这里已经描述了,非常简单,就是要将表名、字段名中存在有小些字母造成的,在定义是都用大写就没有问题,也不在需要双引号了:

解决方法

综述

模拟一下实际情况,假设已经从其它数据库里导入了数据,表结构也已经生成,我们如何快速修复,采用3步即可实现,相关数据表结构的修复:

1、创建个测试表

2、验证查询

3、快速修复

1、创建个测试表

create table "tb_test" (
       "id" varchar2(10),
       "name" varchar2(100),
       "birthday" date,
       "gender" varchar2(100)
 )

all_procedures 表查不到 oracle找不到表和视图_表名

 

2、验证查询

2.1 表名带双引号查询:

select * from "tb_test"

all_procedures 表查不到 oracle找不到表和视图_java_02

 

2.2 表名不带双引号查询:

select * from tb_test

all_procedures 表查不到 oracle找不到表和视图_java_03

 

3、快速修复

从schema配置表里找到需要调整的表,及表中需要调整的字段,自动生成相关的修复语句,执行修复即可:

3.1 生成修复语句

-- 1、修改表名为大写
select 'ALTER TABLE "' || table_name || '" RENAME TO '|| upper(table_name) || ';' AS SQL 
       from user_tables 
       where table_name <> upper(table_name)
       
-- 2、修改字段名为大写
UNION ALL select 'ALTER TABLE ' || table_name || ' RENAME column "'|| column_name || '" to ' ||  upper(column_name) || ';' 
      from user_tab_columns 
      where column_name <> upper(column_name)
;
-- 3、添加ID为主关键字, 按需使用
-- UNION ALL select 'ALTER TABLE ' || table_name || ' ADD CONSTRAINT PK_' || table_name || ' PRIMARY KEY (ID);' from user_tables;

all_procedures 表查不到 oracle找不到表和视图_oracle_04

3.2 执行修复语句

将3.1中执行结果拷贝之新的SQL窗口执行

ALTER TABLE "tb_test" RENAME TO TB_TEST;
ALTER TABLE tb_test RENAME column "gender" to GENDER;
ALTER TABLE tb_test RENAME column "birthday" to BIRTHDAY;
ALTER TABLE tb_test RENAME column "name" to NAME;
ALTER TABLE tb_test RENAME column "id" to ID;

all_procedures 表查不到 oracle找不到表和视图_oracle_05

3.3 验证修复结果

返回2.2再次执行,正常返回结果,不会再报错了:

all_procedures 表查不到 oracle找不到表和视图_数据库_06

 

总结

本文中的内容仅供程序员在开发过程中使用,对于企业中有DBA人员,一般不会出现,或者较少出现此种问题,因为DBA都会做一些基本管控,但开发人员则是因为侧重点不同,知识面会有偏差,才会遇到这种问题。