oracle学习之路汇总

一、序言

自古序言吹水,最近由于项目需要,开始使用起了oracle,大学一直用的是mysql,虽然mysql与oracle都是SQL,但是两者还是有些许不一样,以下内容,往后使用遇到的坑就汇总到这里。

二、oracle成神之路(扑街之路)

1、oracle 11R的安装

安装步骤 csdn上一大堆,我这里就推荐一篇:
Oracle11g安装教程
我安装时,没出现啥问题,一切正常,一步到位。

2、oracle 11R 的卸载

这个就比较坑爹了,我前一个员工,安装时,密码不知给我弄成啥了,我也懒得去重置密码,百度一堆迷迷糊糊的,就干脆卸载,刚好体验一下安装oracle
卸载这里推荐百度经验上的贴,删得干干净净:
oracle 11R的卸载

3、oracle的分页实现

这个真是的皮,mysql写习惯,以为oracle也是limiit分页,然后,居然给我报错,我靠我还以为太久没写了,limit拼错了,一脸懵逼的百度一波,居然oracle没有limit,分页是用rownum,这就牛逼了
在这里插入图片描述
基本分页格式可以写成

SELECT * FROM
(
   SELECT A.*, ROWNUM RN
   FROM (SELECT * FROM TABLE_NAME) A
   WHERE ROWNUM <= 40
)
WHERE RN >= 21

参考文章:oracle分页

4、坑爹的group by

下列语句,如果是在mysql下执行,肯定没有问题,但是oracle就不行,目前我还真不能理解这样做的意义。
在这里插入图片描述
这里的主要原因是,oracle的group by 的列,必须是select 的所有列,所以我这应该改成下图,这样就不会报错了,问题可能也来,要是,我就是想group by 一个列呢,另一个列我不想group,那就只能嵌套子查询了
在这里插入图片描述

参考文章:Oracle报错:不是GROUP BY 表达式

5、oracle语法 nvl

经常性,会有需要sum的业务,也常常会有null值,如果不处理,肯定会出错,所以既需要nvl(sum(xx),0),值得一提的是,mysql的相应语法是nullif(sum(xx),0)

6、oracle的时间格式化语法

毕竟接触mysql比较多,习惯性就写了,date_format(),然后居然给我报错,说标识符无效,这就尴尬了,还以为自己英语能力变差了,拼写错误,百度得知,oracle没有这个语法,应该用to_char(),如果你的时间字段是varchar2的话,还应该用to_date()函数,将其转为日期在to_char()
附to_char() 格式化函数详解

7、sys用户使用navicat连接oracle问题

使用sys登录时,出现下方的弹窗

在这里插入图片描述
解决
选择上方的高级选项,选择角色SYSDBA,回去常规再次连接,即可
在这里插入图片描述

8、oracle的快速数据迁移

8.1 oracle数据备份
  • 导出此用户下的所有表
    exp 用户名/密码 file=xx/xx.dmp
  • 导出此用户下的部分表
    exp 用户名/密码 file=xx/xx.dmp tables=(xx,xx,xx)
  • 导出远程服务用户下的部分表
    exp 用户名/密码/(服务名,默认orcl) file=xx/xx.dmp tables=(xx,xx,xx)

oracle的dmp数据导入

  • 导入此用户下的所有表
    imp 用户名/密码 file=xx/xx.dmp full=y
  • 导入此用户下的部分表
    imp 用户名/密码 file=xx/xx.dmp tables=(xx,xx,xx)
  • 导入远程服务用户下
    imp 用户名/密码/(服务名,默认orcl) file=xx/xx.dmp tables=(xx,xx,xx)

最后附上一些参数的参考地址:https://blog.csdn.net/fghsfeyhdf/article/details/79807690

9、oracle 查询的字段全为大写

某条select之后的结果,居然是这样,字段全大写了,跟java的实体类对应不上,这里只需要 添加 as别名,同时注意别名需要双引号,这点很重要

select acceptor as "acceptor" from you_table

在这里插入图片描述

10、oracle 除数不能为0

利用decode函数
select decode(b,0,0,a/b) from dual;
当b = 0时,返回0,否则才返回a/b的结果。

11、oracle误删数据找回

通过时间恢复删除且已提交的数据

1)查询当前系统时间
 select to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss’) from dual;
 
2)查询删除数据的时间点的数据
 select * from 表名 as of timestamp to_timestamp(‘2018-10-09 15:29:00’,‘yyyy-mm-dd hh24:mi:ss’); (如果不是,则继续缩小范围)
 
3)恢复删除且已提交的数据
–开启行移动功能(解决执行以下语句报错问题)
alter table 表名 enable row movement;

–恢复某个时间点的数据
flashback table 表名 to timestamp to_timestamp(‘2018-10-09 15:29:00’,‘yyyy-mm-dd hh24:mi:ss’);
–关闭行移动功能
alter table 表名 disable row movement;

12、oracle的长度限制

oracle的表名、字段名、constraint名的长度只能在30字符,超长会报错。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值