【问题集萃】N008:访问Oracle数据库发生ORA-01747问题的分析(Kepner-Tregoe问题解决模型应用)
基于KT问题解决模型来进行Oracle发生的ORA-01747问题的分析调查。
Kepner-Tregoe问题分析解决模型主要是按照以下的方式来对问题进行分析解决:
弄清问题----〉定位根本原因----〉确定解决方案----〉决定并制定计划----〉实施与评价
问题描述:
项目开发中遇到一个技术问题,Oracle DB设计时一个表里面使用了“COMMENT”作为一个字段,使用Oracle自带的Enterprise Manager Console创建表,没有发生错误。但是在使用PL/SQL进行数据操作时,发生了错误:ORA-01747: 无效的表或者列。
原因分析:
- 使用的SQL文存在问题,将表名或者字段名称书写错误。
- 建立的DB表存在问题。
首先通过再次确认SQL文,发现SQL文中的使用的名称和DB中的一样,也就是不是书写SQL的错误。
接着分析错误编号,发现产生该问题是使用了Oracle中的保留字(COMMENT)所导致。通过PL/SQL或者JAVA进行数据插入时,直接使用保留字字段,会产生ORA-01747错误,提示存在无效的表或者列。可以通过使用引号的方式来规避这个问题。
最后通过Enterprise Manager Console察看创建DB表生成的SQL脚本,发现脚本中的字段都使用了双引号(例如:“TableName”.“COMMENT”)。所以在通过Enterprise Manager Console建表和插入数据时不会出现问题,但是程序和PL/SQL中都是直接使用字段名称来操作DB,就会出现以上问题。
解决方案:
- 修改表结构:改变COMMENT字段名称,以避免和ORACLE的保留字冲突。
- 修改程序:将程序代码中使用该字段代码中,通过添加引号来实现。
制定计划:
DB的设计和脚本不需要修正,现有的程序中所有访问该字段的机能都需要按照方案2来进行编码。
实施评价:
通过修改访问该字段的SQL文,能够解决出现上面提到的ORA-01747错误,经过多次测试程序运行正常。
该方案并不是最佳方案,因为这种修改影响范围广,SQL复杂。另外,需要根据实际业务和客户的诉求来进行最终方案的选择。
经验指导:
在进行DB设计的时候,所有的字段尽量避免使用ORACLE保留字,以便引起很多不必要的麻烦。如果现有的设计中使用了ORACLE保留字,那么可以采用加引号的方式来实现。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
