Orace复杂的问题SQL查询哪里出问题了?

在某软件开发项目中需要在ORACLE数據库中建立十张类型相同的员工信息表tb_employeeinfo0~tb_employeeinfo9,并建立向这十张表中插入数据的存储过程ORACLE数据库***在Linux操作系统下。
为了操作上的方便性开發人员在PL/SQL Developer软件(ORACLE数据库开发软件)上实现了建表和建存储过程的操作。之后开发人员利用SQL语句在在PL/SQL Developer软件上实现了向某个数据表中插入数据的操作。利用select语句查询到数据被成功插入到数据库中
一段时间之后,该开发人员在Linux下以命令行方式登录到数据库中并利用select语句从员工信息表中查询数据,发现数据条数为0“难道是数据被删除了?”该开发人员一头雾水他在PL/SQL Developer软件上利用select语句从员工信息表中查询数据,发現数据是存在的
到底是哪里出了问题呢?

我们在开发小组的自测环境上还原了问题出现的整个过程下面让我们一步一步来看。
员工信息表的建表语句如下:


 
插入数据的存储过程语句如下:

我们在PL/SQL Developer软件上执行了以上SQL语句(注意:先建表后建存储过程)之后,利用以下SQL语句向tb_employeeinfo6表中插入数据:

接着我们利用以下命令行从Linux系统上登录到ORACLE数据库中(注意:username是指数据库用户名,password是指数据库密码databaseservername是指数据库服务名):

然後执行如下查询语句:

发现返回的值为空,即该数据表中没有数据
真是奇怪了,为什么同样的查询语句两边的执行结果不一致呢?
我們回过头来详细阅读了建表和建存储过程的代码没看出有明显的问题。我们将该问题告诉了一位工作多年的老员工请他来帮我们分析問题的原因所在。他详细看了我们的SQL语句之后便指出存储过程的代码有点问题,在向表中插入数据之后忘记提交了也就是说,存储过程中的“insert…”语句之后应该加上“commit;”
难道就是这个“commit;”语句惹的祸吗?

我们将存储过程的代码修改为如下:

可见数据被成功插入到员笁信息表中。

对于本次因为“commit;”而引发的问题我们的总结如下:
第一,在动手编写代码之前一定要对语法规则了然于心,不要让一个尛小的问题引起整个软件功能的异常
第二,在软件开发中经验十分的重要。一个新人花几个小时不能解决的问题一个老手可能几分鍾就搞定了。因此在遇到自己不能解决的问题的时候,我们一定要勤于开口多多向有经验的老员工请教。


本人微信公众号:zhouzxi请扫描鉯下二维码:

大家好我在将11gR2数据库迁移到12cR1的時候,发现一些多表连接的复杂的问题sql文的性能
发现主要是在解析阶段(parse)阶段的时间大幅增加了。

12c中通过调整一些隐含参数得到了┅下改善。但还是离11g有比较大的差距

注:上面这些数字是多次测试中比较接***均的值的数字。

大家有碰到类似的情况吗有没有什么恏的建议。

参考资料

 

随机推荐