简介
在应用上Oracle是属于大型数据库,而MySQL是属于中小型数据库。
MySQL比较小,而且免费,开源的缘故,现在也很健壮,若不是大型应用的话,MySQL足以应付一切。
oracle比较庞大,整个体系都很健全。
简单的说MySQL是实用很好用,oracle就是很好很强大。
PL/SQL Developer
PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。不能连接其他数据库。 PL/SQL有一些很实用的功能,本文也是通过PL/SQL连接Oracle数据库进行简述。
一、事务提交
在MySQL中是默认自动提交,如需手动提交需要进行设置。
#查看是否开启自动提交功能
SHOW VARIABLES LIKE 'autocommit';
#手动禁用自动提交功能
SET autocommit = 0;
在Oracle里每执行一个数据操作语句都需要手动进行提交
该图为PL/SQL(数据库可视化工具)中部分功能
第一个图标运行代码 第二个图标提交事务 第三个图标回滚事务
二、数据类型
字符型
MySQL通常使用varchar作为字符串的数据类型,Oracle一般使用的是varchar2,为了与其他数据库的兼容性也可以使用varchar。
varchar和varchar2的区别:
goodsname varchar(20);#可以存储空字符串
goodstype varchar2(20);#Oracle独有的数据类型,不可以存储空字符串,用null来替代
数值类型
MySQL有整型(例如:SMALLINT、INT)、浮点型(例如:FLOAT(D,M)、DOUBLE(D,M))等诸多区分。
而Oracle一般使用number为数值类型定义,虽然Oracle也有部分专门定义某种数据类型的关键字(例如:SMALLINT、INT、INTEGER、DOUBLE PRECISION)但这些都是number的同义词,一般不使用。
日期类
MySQL关于日期的数据类型有DATE、TIME、DATETIME、TIMESTAMP、YEAR等,而Oracle定义日期通常使用DATE,若需要使用日期类中的一部分进行筛选数据可以使用to_char方法来转换。若要存储高精度的时间也可以使用timestamp(小数秒最高精度可达到9位,比MySQL要高2位)
to_char(order_time,'yyyymmdd')#取出order_time中的年月日并转为字符串
#获取当前时间
NOW(); #MySQL
sysdate; #Oracle
文本类
MySQL可以使用TINYTEXT、TEXT、MEDIUMTEX、LONGTEXT来定义文本类型,其中LONGTEXT最多支持4GB字节,而Oracle使用CLOB最高可支持4GB个数据块,数据块大小为2KB-32KB。
小结:数据类型的区别不止罗列出来的这些,但不难看出MySQL使用多种不同的数据类型来定义,而Oracle喜欢把多种类似的数据类型整合为一种,并且能表示的范围更大精度更高。
三、基本语法
#变量赋值
#oracle 变量赋值使用:=
lv_inputstr := iv_inputstr
#mysql 使用赋值使用set关键字. 将一个值赋给一个变量时使用"="
SET lv_inputstr = iv_inputstr
#字符串的连接
#Oracle 使用"||"来连接字符串,也可使用concat关键字,但是使用concat关键字直接连接两个字符串
result := v_int1||v_int2;
#Mysql 使用concat方法连接字符串. MySQL的concat函数可以连接一个或者多个字符串
set result = concat(v_int1,v_int2);
#替换空值
#Oracle 使用nvl(E1,E2)、nvl2(E1,E2,E3)
nvl(E1,E2) #若E1不为空则返回E1,未空,则返回E2
nvl2(E1,E2,E3) #若若E1不为空则返回E2,未空,则返回E3
#MySQL 使用IFNULL(E1,E2)或COALESCE(value,…)
IFNULL(E1,E2) #和Oracle的nvl一样
COALESCE(value,…) #返回第一个不为NULL的参数
#时间函数
#时间转换为字符串型时间
date_format(NOW(),’%Y-%m-%d’) #MySQL
to_char(sysdate, ‘YYYY-MM-DD’) #Oracle
#字符串型时间转换为时间类型
date_format(NOW(),’%Y-%m-%d’) #MySQL
to_date(‘2020-12-01’, ‘YYYY-MM-DD’) #Oracle
#分页查询
#MySQL可以使用limit关键字实现分页查询
select * from emp limit 3 # 查询前三条数据
#Oracle中没有limit这个关键字,所以需要分页查询的时候会比较麻烦,只能使用rownum实现分页查询
select t.*
from
(
select rownum rn,t.*
from
(
select * from t_user
) t where rownum <= M
) t where rn > N
#引号
MySQL不严格区分单引号和双引号,都可以使用
但Oracle通常只使用单引号,只有少数情况可以使用双引号(单引号中的内容需要引号时)
#查询格式
#MySQL可以不加from来进行查询,如
SELECT NOW() #MySQL查询当前时间
#Oracle中查询语句必须有from,若查询的数据不需要指定表,则添加from deal
SELECT SYSDATE FROM dual #Oracle查看当前时间
四、存储过程调试
MySQL不提供调试存储过程的功能,对存储过程难以进行测试维护。
Oracle可以使用PL/SQL Developer工具很方便的对存过进行调试,类似于我们使用IDEA的bebug功能去调试java代码。
调试方法
在包中找到需要调试的存过,选中单击右键,并点击测试到调试页面。
在调试页面点击绿色按钮即可开始调试,后面的按键与IDEA的debug类似,可以直接运行存过,也可以逐行运行存过,还可以一直运行,直到出现异常,可以方便我们定位存过出错的位置。