在數據抽取與清洗場景中,常遇到多用戶需調用同一邏輯函數(如判斷是否為數字 isnum())的需求。若在每個 Schema 下重複創建函數,不僅維護成本高,還易導致版本不一致。本文通過實驗演示如何利用 GRANT EXECUTE 實現「一次創建、多用戶共享」,並驗證授權前後的調用差異。
核心語法:
GRANT EXECUTE ON 擁有者.函數名 TO 目標用戶;
以 SCOTT 用戶下的 isnum() 函數為例,授權給 HYL 用戶:
GRANT EXECUTE ON scott.isnum TO hyl;

錯誤提示:ORA-00904: "ISNUM": invalid identifier,確認 HYL 無權訪問 SCOTT 的函數。
SQL> GRANT EXECUTE ON scott.isnum TO hyl; Grant succeeded.


函數正常返回結果,驗證授權生效。
UTILS 或 COMMON_FUNCS 用戶存放通用函數,統一授權,避免業務用戶互相依賴;EXECUTE,不授予 ALTER、DROP 等 DDL 權限;CREATE SYNONYM isnum FOR scott.isnum;,調用時無需加 Schema 前綴。GRANT EXECUTE 是 Oracle 實現函數級別權限共享的標準機制,配合專用功能 Schema 與同義詞,可構建清晰、可維護的多用戶函數共享架構。小知識,記住即用。