目录
问题
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的博客-优快云博客
解决方法
综述
模拟一下实际情况,假设已经从其它数据库里导入了数据,表结构也已经生成,我们如何快速修复,采用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 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;
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 批评指正🙏🙏