oracle常见错误
2.15:,谨记不要有空格啊,害死人的!!!
1.一个update和delete可以害死一大片人,因为人人都觉得这个句子很好写,不就是:
update table set a=x,b=y;
delete from table where name=xx
当然,现在我说到这个问题了,大家肯定不以为然,这么简单,谁不会啊,其实我也是这么想的(在没有遇到这个问题之前),这么简单的sql,初学者都会,我怎么可能不会,开什么玩笑!就因为这一个问题,害的我几小时不能平静,你懂得作为一个员工,突然出了错却不知道如何补救时的心情,所以大家谨记吧,笑过了之后记得做任何操作时要小心啊,一定要小心啊!
2.pl/sql中我们总是奇怪为什么我的单个sql执行的好好的,但是当我一块执行时却是错误连篇,从我们的逻辑思维来看,确实没什么问题,我也这么想,虽然相信oracle不会犯这么小儿科的问题,但也不怀疑自己的智商,然后就在那纠结吧,纠结吧,再找两人一块纠结吧,把好伙伴也整的无限纠结,到底该咋办?其实,打死你你也很难想到,中外之别。说到这,可能你还不太明白,但是ASCII作为计算机专业的你一定清楚吧,中文状态下的ASCII与英文下的ASCII怎么可能一样?谁让我们的祖先没有能力创造出这么伟大的产品?所以英文状态很重要啊,不知道就删除多余的空格或换行吧!
3.oracle中的报错很奇葩,不是所有的报错就一定符合规范,有时你看到的错误你肯定很明白他的中文意思,so easy嘛,但是半天你也发现不了任何问题,下面给大家看一个sql:
delete from t_ds_tunnel_logic_info t where t.physic_tunnel_no in
(select p.physic_tunnel_no from T_DS_TUNNEL_PHYSIC_INFO p where rownum <=3 order by p.physic_tunnel_no desc) ;
再来看一看他的报错:
ORA-00907: missing right parenthesis
不就是缺失右括号吗?呵呵,这么简单的地方还用我教你吗,那就是肯定不是那么白痴的问题了。来说一下这个问题吧:因为这个是在子查询嵌套里,不允许直接嵌套order by,虽然这里也是top-n的子查询。一般order by只在top-n子查询里起作用,但是这个子查询是作为一个结果集,若不理解看博客
[oracle] rownum 及 选取排序后的前N条数据,讲的很好。
4.看了这个错误我都看疯了,下面是我的插入获取主键
<selectKey resultType="java.lang.Integer" keyProperty="PHONECHANNELID" order="BEFORE"> (select num+1 from (select max(t.phoneChannelId)as num from M_PHONE_CHANNEL_INFO t)) </selectKey>
无论如何都不执行sql,断点都设的不行了,却还是没有结果,最后先要碰碰运气就把keyProperty的属性改为了小写,竟然好使了,最后才想到原来它是与bean中的字段也要匹配的。