程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> 關於Oracle數據庫 >> ORACLE SQL性能優化系列(八)

ORACLE SQL性能優化系列(八)

編輯:關於Oracle數據庫

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往往犧牲了執行效率. 能夠把握上面的運用函數解決問題的方法在實際工作中是非常有意義的)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved