2008年(8065)
分类: 服务器与存储
2008-05-18 13:06:41
产品:DB2 UDB
平台:跨平台
版本:v8.1,v8.2
在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将按顺序尝试用户设置的模式名,从而省略了用户名不同于创建存储过程、函数和数据类型的模式名的用户调用这些对象时必须指定模式名的不便。