用了2年多的MySQL 然后用ORACLE感觉区别不大, 主要是 数据类型、分页、函数 有些不一样,增删改 需要手动commit
数值
select round(56.16, -2) from dual;---四舍五入,后面的参数表示保留的位数 select trunc(56.16, -1) from dual;---直接截取,不在看后面位数的数字是否大于5. select mod(10, 3) from dual;---求余数
字符
select upper('yes') from dual;--YES select lower('YES') from dual;--yes
格式1:substr(string string, int a, int b); 格式2:substr(string string, int a) ; ps: a 截取字符串的开始位置(注:当a等于0或1时,都是从第一位开始截取) substr('HelloWorld',0,3); //返回结果:Hel,截取从“H”开始3个字符
日期
sysdate; -- 当前时间 select sysdate+1 from dual;----算出明天此刻 select months_between(sysdate,e.hiredate) from emp e;----查询出emp表中所有员工入职距离现在几月。
转换
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual;---日期转字符串 select to_date('2018-06-07 16:39:50','yyyy-mm-dd hh24:mi:ss') from dual;---字符串转日期
其他
NVL(exp1,exp2)函数的作用机制 : 如果 exp1 为空 , 函数 返回 exp2 的值 ; 如果 exp1 不为空, 函数 返回 exp1 的值 ; 如果两个参数都为NULL ,则返回NULL
NVL2(exp1,exp2,exp3) 如果 exp1 不为空 ,函数 返回 exp2 的值; 如果 exp1 为空 ,函数 返回 exp3 的值;
因为没有mysql 的 limit 所以 使用rownum(行号-虚拟) 当select操作的时候,每查询出一行记录,就会在该行上加上一个行号,行号从1开始,依次递增,不能跳着走。ps: 排序操作会影响rownum的顺序 先有rownum再有排序
查询第二页数据(每页显示5行)
select * from( select rownum rn, tt.* from( select * from emp order by sal desc ) tt where rownum<11 ) where rn>5//TODO 理解不是很深
ps :参数 数据类型 不能有长度
建立存储过程语法:
create [or replace] PROCEDURE 过程名(参数名 in/out 数据类型) AS begin PLSQL 子程序体; End;
执行存储过程语法:
//1、call 调用 call procedureName(); //2、begin ... end 调用 begin procedureName(); end;
1、新建表 Student 2、创建序列
CREATE SEQUENCE student_sequence INCREMENT BY 1 -- 每次增加1个 START WITH 1 --从1开始计数 NOMAXVALUE -- 不设置最大值 NOCYCLE --直累加,不循环 NOCACHE --不建立缓冲
3、创建触发器
CREATE OR REPLACE TRIGGER STUDENT_TRIGGER BEFORE INSERT ON STUDENT FOR EACH ROW -- WHEN (new.ID is null) 设置主键存在时,不触发触发器 BEGIN SELECT STUDENT_SEQUENCE.NEXTVAL INTO :NEW.ID FROM DUAL; END;
没有数据插入 有数据则更新
<insert id="merge" parameterType="cn.evun.srm.sc.model.RfqConfig"> merge into GSC_RFQ_CONFIG t using dual on(t.configType = #{configType}) when matched then update <set> <if test="param1 != null"> param1 = #{param1}, </if> <if test="param2 != null"> param2 = #{param2}, </if> <if test="modifyId != null"> modifyId = #{modifyId}, </if> <if test="modifyTime != null"> modifyTime = #{modifyTime}, </if> </set> when not matched then INSERT ( billItem,configType,param1,param2,createId,createTime) VALUES ( GSC_RFQ_CONFIG_SEQ.nextval,#{configType},#{param1,jdbcType=VARCHAR},#{param2,jdbcType=VARCHAR},#{createId},#{createTime}) </insert>
