系统从mysql移栽到oracle的一些简单总结

系统从mysql移植到oracle的一些简单总结

   公司开发的一个项目因为号称是跨平台,所以在交付的时候客户要求一个oracle版本,  还好大部分的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 楼 ileson 2010-05-24  

郁闷ing

2 楼 xseven 2010-05-24  

ileson 写道

郁闷ing

郁闷啥阿?

3 楼 ileson 2010-05-25  

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.yc.model">
	<class name="Agency" table="t_node">
		<id name="id" column="ID">
			<generator class="native"></generator>
		</id>
		<property name="agId" column="AG_ID" type="string"></property>
		
		<property name="agName" column="AG_NAME" type="string"></property>
		
		<property name="agAddress" column="AG_ADDRESS" type="string"></property>
		<property name="agContact" column="AG_CONTACT" ></property>
		<property name="agPhone" column="AG_PHONE" ></property>
		<property name="agMobile" column="AG_MOBILE" ></property>
		<property name="comment" column="COMMENT"></property> 
		
	</class>
</hibernate-mapping>

上面是我的hbm.xml文件

最后一个属性是oracle 的关键字COMMENT。

但是又不能改数据库。

现在能从配置文件解决这个问题吗?

方便的话告诉我。十分感谢啊。

我的邮箱:i.leson@163.com

我的异常网推荐解决方案:oracle存储过程,http://www./oracle-develop/177537.html

系统从mysql移栽到oracle的一些简单总结

相关文章:

你感兴趣的文章:

标签云: