1.mysql中有自增长,oracle用新建sequence代替。
2.在实体类的id要指定相关的sequence
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq_pl_policy")
@SequenceGenerator(name="seq_pl_policy",allocationSize=1,initialValue=1, sequenceName="seq_pl_policy")
3.注意数据库中的数据类型改动,比如text转为clob等
4.注意数据库中列的名称中不能含有oracle中的关键词,如:size,date等
5.在sql代码中,oracle比mysql严格;例子如下:
mysql中可以写group by createtime desc而oracle只能写group by createtime。
mysql中可以出现size和date作为别名,但oracle会报错。
mysql中可以使用“||”,而oracle只能用or。
mysql中别名可以是 AS 'highLevelNum' ,而oracle只能是AS highLevelNum
mysql中在select中可以出现非group by 中的列,而oracle中必须是只能是group by中的列。如:
mysql中:select t.c_eve_level as evelevel,to_char(t.c_create_time,"yyyymmddhh24") as evetime,sum(t.c_match_num) as evematch
from t_eve t
where 1 = 1 and (t.c_from_email <> NULL or t.c_from_email <> '')
group by t.c_eve_level,t.c_create_time
order by t.c_create_time desc
oracle中:select t.c_eve_level as evelevel,to_char(t.c_create_time,"yyyymmddhh24") as evetime,sum(t.c_match_num) as evematch
from t_eve t
where 1 = 1 and (t.c_from_email <> NULL or t.c_from_email <> '')
group by t.c_eve_level,to_char(t.c_create_time,,"yyyymmddhh24")
order by to_char(t.c_create_time,,"yyyymmddhh24") desc
6.sql脚本中用到的函数,mysql和oracle也不同。
mysql中用ifnull,oracle用nvl或decode。
mysql中用left,oracle用substr。
mysql中用if,oracle可以用decode。
mysql中用dateformat,oracle可以用to_char。
mysql可以用日期和相同格式的字符串比较,而oracle只能用转成相同类型再比较。
7.在oracle中如果一个事务中执行的sql较多,就会报错。可以在配置文件id为sessionFactory中添加<prop key="hibernate.jdbc.batch_size">50</prop>