闲暇之余,写点Oracle的笔记;分为基础和进阶两部分,基础部分写点日常常见的函数使用,进阶部分写点与业务有关的以及排查问题的方式
一,Oracle基础知识
1.Oracle trunc函数,获取日期以及截取精度使用;
1 | select trunc(sysdate,'yy') from dual ;当前年的第一天=2017/1/1 |
2.NVL函数的格式如下:NVL(expr1,expr2),判空表达式
如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值。
3.ROUND() 函数用于把数值字段四舍五入为指定的小数位数
1 | select round(12.345,2) from dual;12.35 |
4.保留精度,有时候就想让查询保留若干为小数
1 | select to_char('12.345','00.00') from dual;12.34 |
5.rank函数,通常用于按照某个特定的条件来排序,特定条件相同的,rank值相同;
1 | select rank() over(order by field) as rank from table; |
结果类似于
field | rank |
---|---|
a | 1 |
a | 1 |
b | 3 |
6.dense_rank函数,与rank函数相似,只不过rank值他是连续的
1 | select dense_rank() over(order by field) as rank from table; |
结果类似于
field | rank |
---|---|
a | 1 |
a | 1 |
b | 2 |
二,Oracle进阶知识
1.Oracle递归查询,数据之间有父子依赖关系,比如字段中有id,parentId字段,现在想看id=1的所有子节点;
SELECT … FROM + 表名 START WITH +条件1CONNECT BY PRIOR +条件2WHERE +条件3
条件1:是根节点的限定语句,当然可以放宽限定条件,以取得多个根节点,也就是多棵树;
条件2:是连接条件,其中用PRIOR表示上一条记录,例如CONNECT BY PRIOR id= pid,连接条件为,id是别人的父id的值
条件3:是过滤条件,用于对返回的记录进行过滤。
1 | select t.*,level from treeList t start with id=1 connect by prior id = pid;//查找id为1,并且id是别人的pid(父id)的子节点,即查看id为1的所有子节点元素,以及他们所在层级 |
2.查看列名在哪些表中存在,区分大小写;
1 | select table_name from user_tab_columns where column_name="###" |
3.查询Oracle正在执行的sql语句及执行该语句的用户;
1 | select b.sid oracleID, b.username 登录用户名, |
4.查看正在执行sql的发起者的执行程序;
1 | select OSUSER 登录身份, PROGRAM 发起请求的程序, |
5.查出oracle当前的被锁对象;
1 | select a.session_id sid, c.serial#, a.locked_mode 锁模式, |
6.kill掉当前的锁对象:
1 | alter system kill session 'sid,s.serial#'; |
- 本文作者: Kiven
- 本文链接: http://hzxstudio.com/2018/08/15/oracleNote/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!