Page 1 of 1

某些严重错误会导致 DSNTEP2 立即退出

Posted: Mon Feb 10, 2025 8:40 am
by Bappy11
本。因此,您不再需要 PL/I 编译器来使用 DSNTEP2。

因为 DSNTEP2 是一个应用程序,并且 PL/I 源代码随 DB2 一起提供,所以知识丰富的 PL/I 程序员可以轻松修改代码。当然,修改之后,必须对其进行编译、链接和绑定,然后才能使用。

DSNTEP2 可以处理几乎所有可以动态执行的 SQL 语句。DSNTEP2 接受

GRANT 和 REVOKE DCL 语句,
ALTER、COMMENT ON、CREATE 和 DROP DDL 语句,
DELETE、INSERT、SELECT 和 UPDATE DML 语句,以及
COMMIT、ROLLBACK、EXEC SQL、EXPLAIN 和 LOCK 语句。
DSNTEP2 不支持的唯一重要语句是 LABEL ON DDL 语句。当然,如果您具有 PL/I 知识和 PL/I 编译器,则可以修改 DSNTEP2 以支持此语句。

DSNTEP2 何时提交?

好吧,这个问题的简单答案是,SQL 的结果将在所有 SQL 完成后提交。一个有用的答案会稍微长一点。

首先,您需要知道 DSNTEP2 有一个名为 MAXERRORS 的内部参数,该参数控制在停止之前可以发生的失败语句数。失败语句是返回负 SQLCODE 的语句。程序内部将 MAXERRORS 的值设置为 10,因此 DSNTEP2 将允许 9 个失败的 SQL 语句,但当它遇到第 10 个失败语句时,它将退出,并提交所有其他工作。

这很糟糕,因为它会严重破坏数据的完整性。我的意思是,谁会想弄清楚运行了什么、影响了什么,然后尝试重建作业以修复数据和/或在正确的地方重新启动?要重新运行 DSNTEP2,请记住,所有以 0 SQL 代码完成的 SQL 语句都已提交。这些语句不应重新运行。所有以负 SQL 代码完成的 SQL 语句都必须更正并重新处理。
。一种严重错误是 -101“SQL 语句太长或太复杂”。

如果在 DSNTEP2 执行期间发生任何 SQL 错误,则作业步骤将返回返回代码 8。

无论如何,DSNTEP2 永远不会自行发出显式 COMMIT 或 ROLLBACK。除非程序异常终止,否则 COMMIT 会在最后发生。

正确指定 SQL 语句

DSNTEP2 要运行的 SQL 在 SYSIN 中指定。请确保正确编写 DSNTEP2 输入。

DSNTEP2 从包含 80 字节记录的输入数据集中读取 SQL 语句。SQL 语句必须编码在每个输入记录的前 72 乌拉圭电报数据 个字节中。SQL 语句可以跨越多个输入记录,并以分号 (;) 结尾。SQL 语句文本中不允许使用分号。

自由评论 DSNTEP2 输入

可以使用第 1 列和第 2 列中的两个连字符或第 1 列中的单个星号将注释传递给 SQL 语句中的 DSNTEP2。这样做是一种很好的形式,可以帮助其他人理解您的 DSNTEP2 作业正在尝试完成什么。

结论

DSNTEP2 对于运行一次性 SQL 语句特别有用。当您需要在批处理环境中运行临时 SQL 时,请使用 DSNTEP2。DSNTEP2 比编写您自己的快速而粗糙的程序来批量运行临时 SQL 要容易得多。它设置简单,节省时间。但是,如果您有多个 SQL 修改语句(INSERT、UPDATE、DELETE),请小心,因为如果某些语句失败而其他语句成功,则可能会出现上述数据完整性问题。

最初发表于 Craig Mullins 的博客http://db2portal.blogspot.com/。