如何找到调用存储过程/函数

时间:2012-06-18 15:24:34

标签: sql db2 ibm-midrange

我们为所有SQL存储过程和函数实现了一个全局错误记录器。当过程/函数遇到SQLEXCEPTIONSQLWARNING时,我们调用全局错误记录器并执行GET STACKED DIAGNOSTICS语句。我们需要的部分数据是失败的过程名称。我没有看到GET DIAGNOSTICS可用的返回值(ROUTINE_NAMEROUTINE_SCHEMA有条件地返回,我总是需要它)。

我们目前正在使用QWVRCSTK API,但我认为如果提供此数据,SQL有一个方法。有谁知道我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

select @@ProcID  

返回当前Transact-SQL模块的对象标识符(ID)。 Transact-SQL模块可以是存储过程,用户定义的函数或触发器。

从那里你可以:

select OBJECT_NAME(@@ProcID)  

将返回对象的名称。

答案 1 :(得分:0)

Retrieve Job Information (QUSRJOBI) API可以返回在作业中运行当前(最新)SQL语句的对象的限定名称。使用格式JOBI0900访问作业的SQL信息。

您需要创建一个外部存储过程来调用API。 (如果您尝试将其作为SQL存储过程执行,问题是SP本身中的语句将是当前语句;并且您希望当前SQL位于调用过程中。)

调用此SP时,“当前”SQL应该是调用过程中后面的CALL语句。 (我希望这是有道理的。)