目录

问题

原因

解决方法

综述

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: 表或视图不存在

原因

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

关于oracle sql语句查询时表名和字段名要加双引号的问题详解_oracle 表名双引号_zxfBdd的博客-CSDN博客

解决方法

综述

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

1、创建个测试表

2、验证查询

3、快速修复

1、创建个测试表

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

2、验证查询

2.1 表名带双引号查询:

select * from "tb_test"

2.2 表名不带双引号查询:

select * from tb_test

3、快速修复

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

3.1 生成修复语句

-- 1、修改表名为大写select 'ALTER TABLE "' || table_name || '" RENAME TO '|| upper(table_name) || ';' AS SQLfrom user_tableswhere 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;

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;

3.3验证修复结果

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

总结

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

有任何意见、建议、错误,请 +wx13316098767 批评指正