科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网存储频道如何实现调用 DB2 的存储过程或用户定义函数时省略模式名的指定?

如何实现调用 DB2 的存储过程或用户定义函数时省略模式名的指定?

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在DB2中的存储过程和用户定义函数(UDF)命名上使用的都是全限定名方式,如果由于调用存储过程或 UDF的用户的不同等原因而造成 CURRENT SCHEMA的值与存储过程或 UDF 的模式名不同,则在每次调用时都要指明其模式名,

2007年9月7日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

 

产品: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将按顺序尝试用户设置的模式名,从而省略了用户名不同于创建存储过程、函数和数据类型的模式名的用户调用这些对象时必须指定模式名的不便。


 

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章