只读 DB2 使用来自 REXX 中的 PDS(Dataset) 的成员并存储在 Stem 变量中以供进程相互使用
Posted
技术标签:
【中文标题】只读 DB2 使用来自 REXX 中的 PDS(Dataset) 的成员并存储在 Stem 变量中以供进程相互使用【英文标题】:Read Only DB2 use members from the PDS(Dataset) in REXX and stored in Stem variable for processs the each other 【发布时间】:2013-11-22 06:17:48 【问题描述】:我的要求是单独查找 DML 操作,例如 PDS 成员中的表的(选择、插入、更新和删除)。PDS 数据集有近 19150 个模块,其中只有 6850 个模块使用 DB2 语句,其余属于任何一个报告或 Ims 模块。
A = OUTTRAP('VAR.')
"LISTDS '"DSN"' MEMBERS"
B = OUTTRAP('OFF')
我已经开发了它扫描 PDS 中的所有成员并将其存储在 stem 变量中,然后根据用户输入的成员限定符,它将在 stem 变量中从模块列表中一一搜索,以查找给定的 DML 操作是否对找到的表执行.
但是从成员列表 19150 中获取结果几乎需要 18 分钟。只有 6850 个模块是 DB2 成员。有没有办法在存储在 stem 变量本身时过滤掉剩余的成员?
请给出所有建议来获得这个??
【问题讨论】:
我假设是 Cobol,那么为什么不查询 DB2 呢? DB2 保存来自 DB2 绑定的使用信息。此外,如果您可以获得 PC db2 JDBC 驱动程序,则可以使用 squirrel squirrel-sql.sourceforge.net 之类的东西。它有一个 DB2 插件可以做这样的事情 Rexx Panel 获取用户输入,读取所有PDS成员,然后逐个读取成员,找到用户给的表名。如何在不读取内部成员的情况下消除非DB2成员?都与大型机技术有关。 您的 19,000 名会员计划是什么?查找 LISTDS 的文档。作为一个通用工具,您如何期望它根据成员内部某处的内容过滤“我想要的成员,具有多个值和多个位置”? @cschneid 为您提供了一个非常简洁的解决方案,是的,您可以从 Rexx 完成这一切。如果您无权访问数据库/表,请安排将其作为顺序数据集卸载并进行处理。如果只能从程序源做(因为没有绑定),忍18分钟还是分批做。 【参考方案1】:正如@Bruce Martin 所指出的,此信息在 DB2 本身中是可用的。尝试阅读SYSIBM.SYSPACKSTMT DB2 目录表。 STATEMENT 列包含包的 SQL,NAME 列很可能对应于您尝试解析的 PDS 中的成员。
【讨论】:
好主意,但您还应该告诉 OP 如何将 STATEMENT 列从位数据转换为 EBCDIC,以便实际读取它(假设这是要扫描的表名等)。以上是关于只读 DB2 使用来自 REXX 中的 PDS(Dataset) 的成员并存储在 Stem 变量中以供进程相互使用的主要内容,如果未能解决你的问题,请参考以下文章
从 rexx 代码向 ispf 宏传递参数时出现无效长度错误
以编程方式更改 PDS 成员的 ISPF 统计信息中的用户 ID