很久没有来博客园了,有点半途而废的感觉 - -
今天突然心血来潮,就来写写近段时间的工作吧。
最近把项目从SQLserver迁移到Oracle,累得够呛,把整个项目按一遍F11(有点夸张)那感觉可真带劲啊真带劲。
说说遇到的几个问题吧(我新手)
关于sql
领导出了个主意,把sql语句从程序里面剥离出来,全放到资源文件里头。web这边倒没什么,问题是webservice那边的DB信息还得从另外一个DB取,根据application的配置信息来决定读取哪个资源文件。这样每次取sql之前都有跟DB有交互,我倒是觉得会有性能方面的担忧....不知道还有没有什么好的方法。要我自己出主意的话就直接弄个工厂,做2个DAL的dll了,可惜领导说sql剥离出来,在实施的时候就方便调试一点- -
这一剥离,刚开始最怕那种条件拼接的了。不过后面用like来做,提前把条件写在sql里面,日期的话就用一个超大的区间,算是勉强达到要求了。
第二个问题就是sqlserver和oracle中 ''='' 的问题。有个sql连接了12个表- -,在sqlserver里面跑一点问题都没有,在oracle里面死活查不出数据。后面搞了半天发现其中连接的一个字段是空的,用nvl()函数才搞定.......
sqlserver和oracle有个坑爹的差别啊,就是 ''=''(零长度等于零长度),把这句select * from XXX where ''='' 分别放到sqlserver和oracle里面跑,结果是完全相反的。。。坑爹哇。看到这个文章的同学们得留个心眼了,oracle用=号的时候,得注意它是不是为空('')了,不要像我一样小白。
顺便吐槽一句,sqlserver的isnumeric真好用,在oracle里面就得用其他方法,百度了一下,oracle里面竟然还有抛出异常的,这不是坑爹么,最后用的正则表达式来判断,搞得我还是觉得不妥。
关于oracle客户端。
期间报了一个不能把32位dll加载到64位程序的错(大概意思),百度了半天木有结果,最后才发现是应用程序池的问题.....把程序池里面一个选项“是否为32位应用程序”设为true就行了。吐槽:搞sqlserver从来没有关注过这方面的问题....
关于FDM
FDM里面有一些sql用来抓数据的,那就得重新配置应用了。。。非常的遗憾,在配置FDM的oracle驱动的时候卡了很久。我就纳闷了,怎么一个oracle的产品对oracle数据库的支持貌似还不如对sqlserver。这问题后面解决了,不过我忙其他的,木有关注是怎么解决的,明儿得去了解了解,多学着点。
最后还有一个疑惑,场景是这样的:在一个项目里面上传文件(VBA到webservice),在另一个项目里面下载。(领导不让存数据库)。现在的办法是拿一个公共的绝对路径来存文件,但是我担心如果两个项目以后不部署到一个服务器上,会造成各种麻烦....到时候还得花时间去调。。。园里的前辈们有木有什么好的解决办法哇?