ORACLE SQL成效优化系列(八)

  滥觞:网海拾贝




16.       经由议定外部函数提高SQL服从.
     SELECT H.EMPNO,E.ENAME,H.HIST_TYPE,T.TYPE_DESC,COUNT(*)

     FROM HISTORY_TYPE T,EMP E,EMP_HISTORY H

     WHERE H.EMPNO = E.EMPNO

AND H.HIST_TYPE = T.HIST_TYPE

GROUP BY H.EMPNO,E.ENAME,H.HIST_TYPE,T.TYPE_DESC;


经由议定调用下面的函数可以提高服从.


FUNCTION LOOKUP_HIST_TYPE(TYP IN NUMBER) RETURN VARCHAR2

AS

    TDESC VARCHAR2(30);

    CURSOR C1 IS 

        SELECT TYPE_DESC

        FROM HISTORY_TYPE

        WHERE HIST_TYPE = TYP;

BEGIN

    OPEN C1;

    FETCH C1 INTO TDESC;

    CLOSE C1;

    RETURN (NVL(TDESC,’?’));

END;

FUNCTION LOOKUP_EMP(EMP IN NUMBER) RETURN VARCHAR2


AS
    ENAME VARCHAR2(30);

    CURSOR C1 IS 

        SELECT ENAME

        FROM EMP

        WHERE EMPNO=EMP;

BEGIN

    OPEN C1;

    FETCH C1 INTO ENAME;

    CLOSE C1;

    RETURN (NVL(ENAME,’?’));

END;


SELECT H.EMPNO,LOOKUP_EMP(H.EMPNO),


H.HIST_TYPE,LOOKUP_HIST_TYPE(H.HIST_TYPE),COUNT(*)


FROM EMP_HISTORY H

GROUP BY H.EMPNO , H.HIST_TYPE;

(译者按: 几回在论坛中看到如 ’能不克不及用一个SQL写出….’ 的贴子, 殊不知重大的SQL几回捐躯了实施服从. 可以把握下面的运用函数治理标题的方法在现实任务中是特殊十分有心义的)




版权声明: 原创作品,准许转载,转载时请务必以超链接方法标明文章 原始原因 、作者信息和本声明。不然将追究执法责任。

原文地址:https://www.cnblogs.com/zgqjymx/p/1976087.html