设为首页 收藏本站
查看: 466|回复: 0

[经验分享] 系统从mysql移植到oracle的一些简单总结

[复制链接]

尚未签到

发表于 2016-7-24 14:00:44 | 显示全部楼层 |阅读模式
公司开发的一个项目因为号称是跨平台,所以在交付的时候客户要求一个oracle版本, DSC0000.gif 还好大部分的sql都是写在配置文件中,于是开始了修改之路。总结一下:

1.因为Oracle不支持AUTO_INCREMENT自动递增,所以需要为所有设置了自动递增的字段建立一个Sequence来实现自动递增

2.有一些字段在mysql中不是关键字,而在oracle中是关键字,比如SIZE,COMMENT,initial,user这种情况就涉及到需要修改程序代码,不过后来通过查询发现只要在加引号就可以了。
而且在创建视图时发现 select的时候也需要加上引号,比如 SELECT SP."COMMENT" "COMMENT",否则会报错。

3.MYSQL的text类型在oracle中需要使用long或clob来替换,但在替换的过程中发现 一个table只允许有一个long的字段,所以改为用clob来替换

4.实行存储过程的转换,mysql和oracle的存储过程的语法还是有较大的不同
a.参数的位置: mysql : IN par_year VARCHAR(20)   |oracle : par_year IN VARCHAR(20)
b.定义变量:   mysql : DECLARE NAME VARCHAR(20)  |oracle : NAME VARCHAR(20)
c.临时表的创建: mysql: 可以直接在存储过程中写创建语句    |oracle: 存储过程里不能直接使用DDL语句,所以只能使用动态SQL语句来执行,先定义一个变量 str:="'CREATE GLOBAL TEMPORARY TABLE SETT_DAILYTEST(.....)"
然后用 “execute immediate str;”来调用。
e.存储过程中调用存储过程: mysql: 直接 call 过程名()  | oracle : 先定义字符串:str:=' call proc_getInvoiceID(:param1,:param2) ';再执行“  execute immediate str using in  out ProjectID1,invoiceId” ; 记得一定要带有in out。 比如 “execute immediate str using  out Rworkloads,out Rlessthan,out Runit ,out Rnum,in TaskID1,out Rresult ;”
f.存储过程名长度:oracle的长度不能大于30 ,这个问题必须修改该过程的名称,那就还需要去修改程序的代码。
g.group  by : mysql中group by后可以用别名,oracle却不可以。而且oracle中group by后必须跟所有select中没有参与计算的字段

5.发现在sql中有这样一个条件,(a.ParentProject=NULL OR a.ParentProject="") ,在oracle中会提示错误,检查后发现是因为oracle中是没有''这个概念,null或者''都是用null来表示。

6.使用oracle时配置文件中的sql语句后面不能有分号,mysql则没有要求。

7.修改的过程中发现user这个关键字在查询的时候加了引号又会报错,应该不会是个别现象,以comment为例,测试了发现: 在建表时候如果字段名是Comment,那么在查询的时候加引号的话必须是"Comment",用"COMMENT"或者"comment"都会报错。

8.mysql在insert的时候可以用value或者values,oracle只能用values.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-248707-1-1.html 上篇帖子: 推荐几本学习Java和Oracle的好书 下篇帖子: Hibernate通过MyEclipse 建立oracle数据库连接
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表