Oracle函数

1.修改默认的最大连接数
 oracle的最大连接数缺省值是100,建库时默认值是150,
 主要受processes这个系统参数(实际还应受操作系统限制),
 这是个静态参数,修改后必需重启数据库才能生效,如果权限不够,需要以管理员身份登陆
 alter system set processes=200 scope=spfile;

2.PL/SQL Developer提供了自动提交的设置:(DML操作如 insert,delete,update,select...for update 等都会触发表级锁和行级锁)

查询死锁:
    
  1. SELECT l.session_id sid,  
  2.        s.serial#,  
  3.        l.locked_mode 锁模式,  
  4.        l.oracle_username 登录用户,  
  5.        l.os_user_name 登录机器用户名,  
  6.        s.machine 机器名,  
  7.        s.terminal 终端用户名,  
  8.        o.object_name 被锁对象名,  
  9.        s.logon_time 登录数据库时间  
  10. FROM v$locked_object l, all_objects o, v$session s  
  11. WHERE l.object_id = o.object_id  
  12.    AND l.session_id = s.sid  
  13. ORDER BY sid, s.serial#;  

  a.事务执行后自动提交:Tools -> Preferences -> Window Types -> SQL Window:勾选“AutoCommit SQL”,即可实现自动提交操作。

  b.退出登录自动提交:Tools -> Preferences -> Oracle -> Connection -> Log off with open transaction:选择“Commit”。

IMPORTANT KEY:

1.从父节点查出子节点:start with .....connect by prior ......

  select  字段名   from表名 START WITH PK_PRODUCT_SN = '{0}' CONNECT BY PRIOR PK_KEYP_SN = PK_PRODUCT_SN
2.length与lengthb的区别
区别:length求得是字符长度,lengthb求得是字节长度。
SQL> select length('哈哈') from dual t;  
   
  LENGTH('哈哈')  
--------------  
             2  
   
SQL> select lengthb('哈哈') from dual t;  
   
  LENGTHB('哈哈')  
---------------  
              4  

3.查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断
select * from 表 where Id in (select Id from 表 group by Id having count(Id) > 1)
4.删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录
  DELETE from 表 WHERE (id) IN ( SELECT id FROM 表 GROUP BY id HAVING COUNT(id) > 1) AND ROWID NOT IN (SELECT MIN(ROWID) FROM 表  GROUP BY id HAVING COUNT(*) > 1);
5.case when 用法

  1. CASE WHEN 表达式有两种形式

--简单Case函数  
CASE sex  
WHEN '1' THEN '男'  
WHEN '2' THEN '女'  
ELSE '其他' END  

--Case搜索函数  
CASE
WHEN sex = '1' THEN '男'  
WHEN sex = '2' THEN '女'  
ELSE '其他' END  

   2. CASE WHEN 在语句中不同位置的用法

SELECT   grade, COUNT (CASE WHEN sex = 1 THEN 1      /*sex 1为男生,2位女生*/
                       ELSE NULL
                       END) 男生数,
                COUNT (CASE WHEN sex = 2 THEN 1
                       ELSE NULL
                       END) 女生数
    FROM students GROUP BY grade;--SELECT CASE WHEN 用法
SELECT T2.*, T1.*
   FROM T1, T2
  WHERE (CASE WHEN T2.COMPARE_TYPE = 'A' AND
                   T1.SOME_TYPE LIKE 'NOTHING%'
                THEN 1
              WHEN T2.COMPARE_TYPE != 'A' AND
                   T1.SOME_TYPE NOT LIKE 'NOTHING%'
                THEN 1
              ELSE 0
           END) = 1--WHERE CASE WHEN 用法
SELECT  
CASE WHEN target_qty <= 500 THEN '1'  
WHEN target_qty > 500 AND target_qty <= 600  THEN '2'  
WHEN target_qty > 600 AND target_qty <= 800  THEN '3'  
WHEN target_qty > 800 AND target_qty <= 1000 THEN '4'  
ELSE NULL END salary_class, -- 别名命名
COUNT(1)  
FROM    t_pm_mo_base  
GROUP BY  
CASE WHEN target_qty <= 500 THEN '1'  
WHEN target_qty > 500 AND target_qty <= 600  THEN '2'  
WHEN target_qty > 600 AND target_qty <= 800  THEN '3'  
WHEN target_qty > 800 AND target_qty <= 1000 THEN '4'  
ELSE NULL END;  --GROUP BY CASE WHEN 用法 分别汇总各个区间的人数

6.DECODE() 函数

select decode(sex, 'M', 'Male', 'F', 'Female', 'Unknown')
from   employees;
*另一种形式的if语句

7.wm_concat(column)函数,可以进行所选字段数据值的合并

 或者 listagg 函数

 select listagg(UNIT, ',') within group( order by UNIT) as UNIT from tb_b_unit;



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值