源码-Oracle数据库管理-第十一章-Oracle内置函数-Part 5(通用函数)

这一节虽然题为“通用函数”,但其实并不“通用”,是有一定难度的。

暂且mark以下,后续如果需要,还需要杀个回马枪的

--11.6 通用函数
--11.6.1 通用函数列表
--使用USER和UID示例
SELECT USER,UID FROM dual;
--查询v$session示例(需使用system用户查看)
 SELECT username, schema# FROM v$session WHERE username = USER;


--11.6.2 NVL和NVL2函数
--一个没有注意到NULL的例子
SELECT empno, ename, sal + comm as "salary" FROM emp WHERE deptno = 20;
--使用CASE语句来判断NULL值

SELECT empno,
       ename,
       CASE
         WHEN comm IS NOT NULL THEN
          sal + comm
         ELSE
          sal
       END as "salary"
  FROM emp
 WHERE deptno = 20;

--使用NVL函数
SELECT empno, ename, sal + NVL(comm, 0) as "salary"
  FROM emp
 WHERE deptno = 20;


--使用NVL2函数

SELECT empno, ename, NVL2(comm, sal + comm, sal) as "salary", job
  FROM emp
 WHERE deptno = 20;


--11.6.3 Nullif和coalesce函数
--使用NULLIF函数
SELECT empno, ename, NVL(NULLIF(job, '销售'), '业务') job
  FROM emp
 WHERE deptno = 20;
 
select * from emp for update; 

--COALESCE使用示例(从多个值中返回第一个不为null的值)
SELECT empno, ename, COALESCE(sal + comm, sal, comm + 2000, 2000) as "工资"
  FROM emp
 WHERE deptno = 20;

--11.6.4 Decode函数
--DECODE使用示例(多条件判断功能)
 SELECT empno,
        ename,
        DECODE(job,
               '职员',
               1.15 * sal,
               '销售人员',
               1.20 * sal,
               '经理',
               2.0 * sal,
               '分析人员',
               1.12 * sal,
               sal) 调薪表
   FROM emp
  WHERE deptno = 20;



--使用DECODE的行列置换示例(这个功能貌似很强大,也很实用)
SELECT deptno "员工部门",SUM(DECODE(job,'职员',sal+NVL(comm,0),0)) "职员",
               SUM(DECODE(job,'分析人员',sal+NVL(comm,0),0)) "分析人员",
               SUM(DECODE(job,'销售人员',sal+NVL(comm,0),0)) "销售人员",
               SUM(DECODE(job,'经理',sal+NVL(comm,0),0)) "经理",
               SUM(DECODE(job,'副理',sal+NVL(comm,0),0)) "副理",  
               SUM(DECODE(job,'老板',sal+NVL(comm,0),0)) "老板"
      FROM emp GROUP BY deptno;
                                       

--Sys_guid函数               
--SYS_GUID
SELECT SYS_GUID() FROM DUAL;   

select dump(sys_guid()) from dual;
--创建函数

CREATE OR REPLACE FUNCTION My_Guid return VARCHAR2 AS
  v_guid RAW(16);
BEGIN
  v_guid:=SYS_GUID();       --生成GUID类型
  --通过SUBSTR函数截取GUID结果,最终返回VARCHAR2(38)类型的值
  RETURN  '{'||substr(v_guid,1,8)||'-'||substr(v_guid,9,4)||'-'||substr(v_guid,13,4)||'-'||substr(v_guid,17,4)||'-'||substr(v_guid,20,12)||'}';
END;            
                                        

SELECT My_Guid FROM dual;

你可能感兴趣的:(数据库(DB))