目录
问题
原因
解决方法
综述
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 批评指正