mysql 转 oracle数据库

1.mysql 与 oracle数据类型对比表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

oracle 与 java类型参考表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 表名和字段名的长度

  • oracle不能超过30,mysql无这个限制

3. 字段默认值问题

  • MySQL创建表时,如果某字段定义为NOT NULL,并且没有明确定义default值,则insert时可以不填该字段,mysql会自动给它填一个0或者空串或者其他符合该字段类型的空值。当然如果该字段有明确defaut值,则会填入这个default值。

  • oracle创建表时,如果某字段定义为NOT NULL,并且没有明确定义default值,则insert时必需在sql语句中写值,否则报错(insert into失败)。

  • Mysql的字段默认值有四种:
    未定义、自定义的值(包括空串’‘和’0’)、CURRENT_TIMESTAMP、0000-00-00 00:00:00

4. 索引问题

  • oracle中的索引名不能重复,而mysql可以。

5. 自增字段问题

  • 用sequence,需要修改系统框架的底层insert的实现,要显示地调用序列,类似于以下操作。
@Id
@SequenceGenerator(name="seq",sequenceName="ncl_visitor_state_SEQ",allocationSize=1)
@GeneratedValue(strategy= GenerationType.SEQUENCE,generator="seq")

6. 表空间问题

oracle表空间大小可能不超过32G,需要注意。

7. oracle 与mysql sql语句的区别

  • oracle的sql中不能出现`(按键1的左边),但mysql中经常用它来括住表名。
  • oracle表名和字段名,可以加双引号,也可以不加双引号,但不能加单引号;mysql对于 " 和 ’ 没什么区别。
  • oracle字段的值如果字符串型,必需加单引号,但不能加双引号;
  • 字段的值如果是数字,可以不加单引号,也可以加单引号,但一定不能加双引号。
  • oracle对于大小写的表和字段是不一样的,会导致sql执行失败。mysql无大小写区别。
  • oracle 关键字不能出现在sql语句中,会导致sql执行失败。
  • 分页实现不一样:
//mysql
使用limit
select * from table limit (startPage-1)*pageSize,pageSize;
//limit m,n: m时offset偏移量,获取第m+1条到第m+n条数据。

//oracle-注意:使用rownum(虚拟列)判断时只能使用<,不能使用大于;而使用别名则无此限制。
SELECT * FROM   
(  
SELECT temp.*, ROWNUM RN   
FROM (SELECT * FROM 表名) temp  
WHERE ROWNUM <=end (page*pagesize)  
)  
WHERE RN >start((page-1)*pagesize) --这一种效率高,其他方法暂时不考虑了。

//而rn > m and rownum < n; 获取第m条到第n条数据。

FQA

  • 1.ORA-01830: 日期格式图片在转换整个输入字符串之前结束
一定是其中一个字段或者属性的值出现类似于2005-10-01 12:01:01.0' 后面多了一个.0

//处理办法
去掉.0即可,to_char(),或者substr()都可以。
  • 2.日期操作
SQL> select sysdate, sysdate+3 from dual; --增加三天

select sysdate, sysdate+numtodsinterval(1,'hour') from dual; --增加一个小时

select sysdate nowDate,to_date(sysdate+1/24,'yyyy-mm-dd hh24:mi:ss') searchDate from dual;  --增加一个小时

select to_char(sysdate,'d') from dual; --获取一周内的第几天(需要-1);

select to_char(sysdate,'dd') from dual; --获取一月内的第几天

select to_char(sysdate,'ddd') from dual; --获取一年内的第几天(需要-1);

select sysdate nowDate,add_months(to_date(Sysdate,'yyyy-mm-dd hh24:mi:ss'),6) searchDate from dual;
  • 3.group by select 字段要么在聚合函数中,要么在group by内,否则报错
select a-sum(s) from table group by a ; --a必须在group by内。
  • 4.字段名不能使用单引号,要么不用,要么用双引号,区别无非就是大小写的问题。

  • 5.oracle sql不能包括关键字:
    譬如:

level ,comment,offline等oracle内置关键字。
  • 6.true 和false 使用number(1) 代替:
0:false;1:true;
  • 7.获取列的行号
//mysql是实现方式
select (@i:=@i+5) as rownum, surname, personal_name from student, (select @i:=100) as init;

//oracle
使用rownum即可
  • 8.别名的用法
1. 在Oracle里,表的别名不能用as,列的别名可以用as
2. where,group by,having不能直接使用别名,需要使用子查询。
3. order by 可以使用别名
4. mysql中,group by,order by中可以使用别名;where中不能使用别名。
  • 字段判断是否为空,并赋值问题
nvl2(ss,1,0)  --ss为空,则为0,反之,则为1。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值