Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >当存在重载时,检查DB2上是否存在函数

当存在重载时,检查DB2上是否存在函数
EN

Stack Overflow用户
提问于 2020-06-29 16:41:07
回答 2查看 160关注 0票数 0

使用Db2时,我尝试使用一个“防错”函数来检查给定的函数/存储过程是否存在,如果为真,则将其删除。对于非重载函数,它可以很好地工作,但如果相同的函数具有另一个签名,但具有相同数量的参数,则该函数将无法工作。

示例:

代码语言:javascript
运行
AI代码解释
复制
create function aaa.a_drop(in a integer, in b varchar(32)) 
returns integer 
begin 
return(1) 
end;
代码语言:javascript
运行
AI代码解释
复制
create function aaa.a_drop(in a varchar(32), in b integer)
returns integer 
begin 
return(1) 
end;

这两个函数具有相同的名称和参数计数,但签名不同。

我使用这段代码来检查对象,如果它存在,则返回1

代码语言:javascript
运行
AI代码解释
复制
call aaa.drop_if_exists('aaa','a_drop',2,'integer,varchar(32)');
create function drop_if_exists(in v_schema varchar(128),in v_function_name varchar(128), in v_params_counter integer, in v_params_signature varchar(128) default null)
returns integer
begin
 declare v_count integer;--
 select count(1)
 into v_count
 from syscat.routines
 where ROUTINESCHEMA = v_schema
 and routinename = v_function_name
 and routinetype = 'f'
 and parm_count = v_params_counter
 return v_count;--
end;

这将返回两个函数。我可以在函数中给出签名,但在syscat.routineparms中找不到单独的函数。

如何验证函数/存储过程是否存在于Db2中?

EN

回答 2

Stack Overflow用户

发布于 2020-06-29 17:54:05

使用PARMS列的不同值尝试此操作。

代码语言:javascript
运行
AI代码解释
复制
SELECT *
FROM
(
SELECT P.ROUTINESCHEMA, P.SPECIFICNAME, LISTAGG(P.TYPENAME, ',') WITHIN GROUP (ORDER BY P.ORDINAL) AS PARMS
FROM SYSCAT.ROUTINES R
JOIN SYSCAT.ROUTINEPARMS P ON P.ROUTINESCHEMA = R.ROUTINESCHEMA AND P.SPECIFICNAME = R.SPECIFICNAME
WHERE P.ROWTYPE IN ('B', 'O', 'P')
AND R.ROUTINESCHEMA = 'SYSPROC' AND R.ROUTINENAME = 'SNAP_GET_DB'
GROUP BY P.ROUTINESCHEMA, P.SPECIFICNAME
)
WHERE PARMS = 
--'VARCHAR'
'VARCHAR,INTEGER'
;

在Db2中有两个用于查找表的SYSPROC.SNAP_GET_DB函数。

您可以选择所需的参数,通过传递字符串枚举其参数类型,如本例所示。请注意,不需要传递参数长度-您不能创建2个具有相同参数编号、顺序和数据类型的函数,但具有不同的(Var)字符长度。

票数 1
EN

Stack Overflow用户

发布于 2020-06-29 17:20:08

如果您的db2版本中提供了语法create or replace function,请考虑使用它。

您还可以选择为每个重载版本提供不同的specific名称,然后在syscat.routines中搜索该特定名称,并使用可能有用的drop specific function...语法。

否则,您可以在每个签名的每个参数的syscat.routineparms中进行搜索,尽管对于这样简单的事情,这似乎比使用create or replace更费力。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62642810

复制
相关文章
python 检查是否存在ddos攻击
import dpkt import socket import optparse
用户5760343
2019/07/31
3.8K0
python 检查是否存在ddos攻击
Kettle之“检查表是否存在”
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/53884107
用户1148526
2019/05/25
3.8K0
VBA判断工作表是否存在&不存在时创建(Excel)
Function 表存在(s) For Each i In Sheets If i.Name = s & "" Then 表存在 = 1 '连接空白是避免表格名为数值时格式不同 ' Debug.Print i.Name = s Next End Function Function 建表(s) For Each i In Sheets If i.Name = s Then Exit Function Next Sheets.Add(, Sheets(Sheets.Count)).Nam
林万程
2018/06/20
4.8K0
SonarQube检查项目中是否存在秘钥信息
持续集成和交付(CI / CD)管道旨在支持每天数以万计的部署。生产部署的频率不能以牺牲安全为代价,安全流程也需要与CI / CD管道集成在一起。这就是为什么我们在从开发到生产的流水线的每个步骤中都添加了持续的安全验证,以帮助确保我们的应用程序始终是安全的。
DevOps云学堂
2021/04/23
2.3K0
Javascript中对象如何检查key(键)是否存在
如果要特别测试对象实例的属性(而不是继承的属性),请使用hasOwnProperty:
IT工作者
2022/02/09
26.8K0
检查自己的代码是否存在内存泄露
造成内存泄露的根本原因就是我们写的代码中存在某些对象长期占用内存,得不到释放,且这个对象占用的内存会逐步增加,导致 v8 无法回收,从而造成的服务的异常和不稳定,甚至是服务的中断和崩溃。
zz_jesse
2020/03/17
3K0
使用 shell(bash) 来检查 git 分支是否存在
不多说,直接上代码 localBranch=$(git branch|awk '{print $2}') if [ -n "localBranch" ]; then echo "存在该分支,并不进行创建" else echo "该分支不存在" fi
用户2353021
2020/05/11
3.6K0
Node.js中如何检查是否存在某个目录
Node.js fs本地模块提供了几种有用的方法,可用于处理目录。 检查Node.js中是否存在某个目录的最简单方法是使用fs.existsSync()方法。
ccf19881030
2020/10/29
12K0
PHP检查对象或类中是否存在属性
$obj = \app\common\library\Email::instance(); $obj->p=889; if(isset($obj->p)){ echo 66; }else{ echo 99; } die; isset既可以判断对象的属性是否存在,也可以判断数组的键名是否存在 未经允许不得转载:肥猫博客 » PHP检查对象或类中是否存在属性
超级小可爱
2023/02/20
4.3K0
知识分享之Golang——基于Golang的文件夹是否存在、文件是否存在函数
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。
cn華少
2022/06/08
1.3K0
VBA应用技巧:检查文件夹是否已存在
在使用VBA操作文件时,如果不先核实要操作的文件夹是否已存在,则有可能会导致代码出错。例如,在创建文件夹时、在到指定的文件夹中获取文件时。因此,我们需要先使用代码判断是否已存在相应的文件夹。
fanjy
2022/11/16
4K0
mysql新增表或字段时判断是否存在
在升级程序时往往是一大堆的sql语句,而单一的sql语句是没法在新增时判断表或字段是否存在的,必须写成存储过程
仙士可
2019/12/18
9K0
MFC查找指定文件是否存在,PathFileExists 函数[通俗易懂]
PathFileExists函数参数传入的要包含文件名(含文件格式)。 存在该文件,则返回TRUE, 相反,返回FALSE. 调用函数,传参
全栈程序员站长
2022/09/14
2.2K0
LeetCode 1346. 检查整数及其两倍数是否存在
给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M)。
村雨遥
2020/05/06
1.6K0
检查整数及其两倍数是否存在 python3
给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M)。
SingYi
2022/07/14
1.4K0
检查整数及其两倍数是否存在 python3
CA2100:检查 SQL 查询是否存在安全漏洞
一种方法使用按该方法的字符串参数生成的字符串设置 System.Data.IDbCommand.CommandText 属性。
用户4268038
2022/02/20
1.8K0
mysql新建数据时判断表,字段,索引是否存在
-- 新建表时判断表是否存在 CREATE TABLE If Not Exists `表名` ( `id`  int(10) NOT NULL AUTO_INCREMENT , `plan_id`  int(10) NULL  , `bet_num`  varchar(255) NULL  , `vr_win_data`  varchar(255) NULL COMMENT  , PRIMARY KEY (`id`) ); -- 新建字段时判断字段是否存在 CREATE PROCEDURE sp_up
仙士可
2019/12/18
5.6K0
41:判断元素是否存在
41:判断元素是否存在 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB描述 有一个集合M是这样生成的: (1) 已知 k 是集合 M 的元素; (2) 如果 y 是 M 的元素,那么, 2y+1 和 3y+1 都是 M 的元素; (3) 除了上述二种情况外,没有别的数能够成为 M 的一个元素。 问题:任意给定 k 和 x,请判断 x 是否是 M 的元素。这里的 k是无符号整数,x 不大于 100000, 如果是,则输出YES,否则,输出 NO 输入输入整数 k 和 x,
attack
2018/04/11
3.9K0
判断微信是否存在
public static boolean isWeixinAvilible(Context context) { final PackageManager packageManager = context.getPackageManager();// 获取packagemanager List pinfo = packageManager.getInstalledPackages(0);// 获取所有已安装程序的包信息 if (pinfo != null) { for (int i = 0; i < pinfo.size(); i++) { String pn = pinfo.get(i).packageName; if (pn.equals(“com.tencent.mm”)) { return true; } } }
tea9
2022/07/16
3.5K0
点击加载更多

相似问题

检查是否存在(重载)成员函数

30

当模板重载可用时,检查函数的自定义重载是否存在

11

用于检查是否存在重载成员函数的模板

20

从模板中检查成员函数重载是否存在

10

检查是否存在函数

26
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文