天天看點

ORACLE:寫Function時,傳入參數變量名的注意事項

oracle中開發人員寫自己的sql function時,入口參數名不要與select中table的字段名重複,否則雖然編譯能正常通過,但運作的結果往往是錯誤的。

示例:

代碼很簡單,通過員工号EMPNO,得到員工姓名ENAME。

測試代碼如下:

SELECT S_GET_EMP_NAME(7654) FROM DUAL;

傳回結果:SMITH

但是這不是期望的值,EMP中的資料如下:

SELECT EMPNO,ENAME FROM EMP;

----------------------------------------------------

7369 SMITH

7499 ALLEN

7521 WARD

7566 JONES

7654 MARTIN

7698 BLAKE

7782 CLARK

7788 SCOTT

7839 KING

7844 TURNER

7876 ADAMS

7900 JAMES

7902 FORD

7934 MILLER

顯然,7654對應不是SMITH,問題在哪呢?

   WHERE E.EMPNO = EMPNO

這一行條件中,因為變量名EMPNO與表中的字段EMPNO重名了,sql在執行時,認為是 EMPNO這一列在跟自身比較,是以永遠是TRUE,最終隻有ROWNUM=1起了作用,僅傳回了第一行。

解決辦法:

把function中的入口參數改名,比如加個字首 “IN_”,變成"IN_EMPNO"就行了