我可以在 DB2 中找到包含某个列的所有存储过程吗?
Posted
技术标签:
【中文标题】我可以在 DB2 中找到包含某个列的所有存储过程吗?【英文标题】:Can I find all stored procedures that contain a certain column in DB2? 【发布时间】:2021-04-26 13:09:07 【问题描述】:我正在尝试找出所有包含 DB2 中某个列的存储过程。我一直在尝试做这样的事情,但syscat.procedures
中没有syscat.colname
。
select *
from syscat.procedures
where syscat.colname like '%FLAG%'
你们有什么想法吗?谢谢。
【问题讨论】:
你的意思是,SQL 过程提到了一个特定的列名?或者修改或读取特定列?还有哪个 Db2-server 平台(z/os、i series、linux / unix /windows /cloud?) 提供一个您正在寻找的这种存储过程的示例,一个应该被找到,一个应该被排除。 SP 的文本已存储,您可以在某些情况下应用正则表达式。 SQL 过程提及特定列名,我使用 Dbeaver 作为工具,不知道如何检查我使用的是哪个平台 【参考方案1】:您只想检查过程文本是否提到列名。
对于最新版本的 Db2 for linux/unix/windows (Db2-LUW),您可以尝试如下操作:(将 COLNAME 替换为您要查找的名称):
select cast(rtrim(procschema)|'.'||rtrim(procname) as varchar(128) ) as procname
from syscat.procedures
where dbms_lob.instr(text , varchar('COLNAME'), 1) > 0
order by 1
with ur;
请注意,搜索区分大小写,因此如果您需要不区分大小写,则需要进行调整。
此查询不能保证该列在 SQL 中用于插入/更新/删除/选择 - 例如,列名可能在备注中引用或作为变量名的一部分。其他目录表包含静态 SQL 包的依赖对象信息。
【讨论】:
以上是关于我可以在 DB2 中找到包含某个列的所有存储过程吗?的主要内容,如果未能解决你的问题,请参考以下文章
DB2:当找到每个主ID的列的多个类别类型时,选择所有数据行
DB2 LUW 版本 10.5.0.10 - 在存储过程中获取警告(未找到)行