【发布时间】:2017-12-08 05:14:45
【问题描述】:
如何找出用于在 teradata 中加载特定表的存储过程(使用 SQl 查询)?
【问题讨论】:
-
你不能,获取SP源代码的唯一方法是
SHOW PROCEDURE。
如何找出用于在 teradata 中加载特定表的存储过程(使用 SQl 查询)?
【问题讨论】:
SHOW PROCEDURE。
这不会产生确切的结果,但它可能有助于为您指明正确的方向。您可以在 dbc.dbqlogtbl 中查询 INSERT 到表中,获取 sessionid 并为 CALL statementTypes 查找 dbc.dbqlogtbl 条目。
再次......这里是一粒盐,但它可能会产生一些有趣的东西:
SELECT *
FROM dbc.dbqlogtbl
WHERE sessionid IN (
SELECT sessionId
FROM dbc.dbqlogtbl
WHERE statementtype = 'INSERT'
AND username = '<usrname>' /*username that executes the procedure if available*/
AND querytext LIKE '%yourdatabase.yourtable%'
)
AND statementtype = 'Call'
或者,您可以只为您的 proc 转储所有 SPL,然后按 Ctrl+F 直到获得成功。
【讨论】:
CallNestingLevel 表示查询是由 SP 提交的,requestnum 在 SP 中不会更改,您可以使用以下命令直接获取 SP 名称:WHERE StatementType = 'Call' AND ( sessionid, requestnum) IN ( SELECT sessionid, requestnum FROM dbc.qrylogv WHERE CallNestingLevel > 0 AND .... );