在DB2中的存儲過程和用戶定義函數(UDF)命名上使用的都是全限定名方式,即:模式名.標識名。如果由于調用存儲過程或 UDF的用戶的不同等原因而造成 CURRENT SCHEMA的值與存儲過程或 UDF 的模式名不同,則在每次調用時都要指明其模式名,否則會遇到SQL0440N的報錯,即找不到該例程。
如果DB2中創建的存儲過程或用戶定義函數(UDF)會被多個不同用戶所調用,為在調用時省略模式名的指定以簡化調用語句,對于動態準備的SQL語句,可利用定義CURRENT FUNCTION PATH(同 CURRENT PATH)這一專用寄存器,保存一個最長為254個字節的VARCHAR值,來指定用于分解存儲過程、函數或數據類型所引用的SQL路徑,以便省略模式名的指定;而對于靜態SQL,則可通過對BIND命令使用FUNCPATH選項來實現這一功能。具體的方法如下:
對動態 SQL 語句:
---------------
對于未使用全限定名的函數、數據類型以及存儲過程,指定依次以CURRENT PATH中定義的名稱的順序查找并使用限定名:
SET CURRENT PATH = jack, tom
即首先在存儲過程、函數或數據類型的命名中查找是否有以JACK作為模式名的,如果沒有找到,則繼續以TOM為模式名繼續查找。若用:
values (CURRENT PATH)
檢查設置,可得到如下結果:
"JACK","TOM"
要設置回缺省值,應執行:
SET CURRENT PATH = SYSTEM PATH
再檢查設置:
values (CURRENT PATH)
已被改回缺省值:
"SYSIBM","SYSFUN","SYSPROC"
對靜態SQL語句:
---------------
在BIND的FUNCPATH選項中指定用于分解函數、用戶定義單值類型引用的函數路徑。如對模式名的指定可為:
BIND <綁定文件名> FUNCPATH jack, tom
完成上述設置后,當不同的用戶使用非全限定名調用這些對象時,DB2將按順序嘗試用戶設置的模式名,從而省略了用戶名不同于創建存儲過程、函數和數據類型的模式名的用戶調用這些對象時必須指定模式名的不便。