如何解决Control M 没有从存储过程中得到错误
我有一个非常简单的存储过程。这里只是一个可以重现错误的例子。我想在 Control-M 下安排一些程序并避免大量应用程序。
为了出错,我添加了一个简单的 THROW。过去类似的错误由应用程序处理。举个例子:
ALTER PROCEDURE [dbo].[test_my_error] AS
BEGIN
DECLARE @divide INT = 0
BEGIN TRY
PRINT 'Let''s try procedure [test_my_error]'
SELECT 100 / @divide
END TRY
BEGIN CATCH
--This is just a test
THROW;
END CATCH
END
如果我在 sql Server Management Studio 中运行此程序,则会出现错误和以下输出:
让我们试试程序 [test_my_error]
(0 行受影响)消息 8134,级别 16,状态 1,过程 test_my_error,Line 8 [Batch Start Line 0] 除以零错误 遇到了。
这正是我所期望的。
然后我在 Control-M 中构建我的工作,并且我有这个日志:
16:13:29 14/06/2021 SUBMITTED TO host01 5105 16:13:29
14/06/2021 STARTED AT 20210614161329 ON host01 5101 16:13:29
14/06/2021 JOB STATE CHANGED TO Executing 5120 16:13:30
14/06/2021 ENDED AT 20210614161330. OSCOMPSTAT 0. runcNT 7 5100
16:13:30 14/06/2021 ENDED OK. NUMBER OF FAILURES SET TO 0 5133
16:13:30 14/06/2021 JOB STATE CHANGED TO Analyzed 5120 16:13:30
14/06/2021 Job STATE CHANGED TO Post processed 5120
在输出中:
Statement Messages:
-------------------
Let's try procedure [test_my_error]
@RETURN_VALUE = ERROR
Exit Code = 0
Exit Message = normal completion
版本是:
解决方法
两点;
-
您是否通过 Control-M for Databases 运行此程序?它是一个在 Control-M 代理下运行的模块,可让您更好地控制 DB 作业。如果您计划运行大量存储过程等,这绝对值得考虑。
-
Windows 在退出代码(或返回代码,使用大男孩术语)方面是出了名的糟糕。在任务清除失败的情况下,您会收到退出代码 = 0。 Control-M 输出是“标准输出”(在 Unix 术语中)的任何内容。幸运的是 Control-M 可以捕获文本字符串,这在无法依赖退出代码时非常方便。只需在后期处理(即最后一个选项卡)中执行此操作 -
操作 --> 执行/执行操作 --> 在特定语句输出上 陈述 * 代码 * RETURN_VALUE = 错误 * 设置为NOTOK
参见此处的示例 -
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。