SAP HANA 存储过程表不存在



我有两个存储过程,第一个(SP1(创建一个表,第二个(SP2(使用该表。

我不能在一个语句中按顺序运行两个 SP。

CALL SP1();
CALL SP2();

我收到一条错误消息,说"找不到表/视图...">

创建 SP2 时,由于测试 SP1,该表存在,但现在我删除了在运行时 SP2 不运行期间临时创建的所有表。

我意识到我可以先运行 SP1,然后运行 SP2,这将起作用,但是有 39 个 SP,它们在一个接一个地运行时大约需要 2 个小时,因此等待会使该过程花费更长的时间。 我能想到的唯一解决方案是只保留所需的表并截断它们而不是删除它们。如果没有其他办法,我将不得不这样做,但我宁愿放弃它们。创建此 SP 的人非常邪恶,创建了 500 多个这样的表,所以我不希望它们永久存在于我的架构中。

作为旁注,这些表主要用于调试,以便在执行几天后,一旦进程得到验证,就可以删除它们。

我想知道是否有任何方法可以忽略错误或类似的东西或任何其他解决方法。

提前感谢您的时间和专业知识。

问候 莱昂纳多

我找到了一种方法来运行它,而不管缺少什么表。

我只需要将每个SP放在不同的DO开始....结束;块,这似乎一次只验证一个块,并且由于前一个块创建了用于块号2的表,因此一切似乎都正常工作。

DO
BEGIN
CALL SP1();
END;
DO
BEGIN
CALL SP2();
END;

等等。

这些块中有更多东西,我只是放置 SP 调用来简化它们。

我只是把它留在这里,以防其他人遇到与我相同的问题。

如果有人有更好的解决方案,我仍然不胜感激。

这听起来很像这些表实际上是用于在不同存储过程之间"传输"数据的临时表。

使用 HANA 时,没有必要也不建议为该用途动态创建表。

相反,使用表变量并通过表类型参数"移交"数据。

这样,就不必在运行时创建/删除表。

此外,由于表变量被有效地作为内部会话本地临时表处理,因此消除了大量开销(即这些表不需要处理日志记录或并发访问(,这使得它们比动态创建的表更轻量级,性能更好。

动态创建对象的另一个不利方面是,这总是伴随着数据库目录的锁定、检查潜在依赖对象并使其失效以及大量内部缓存。

如果可能的话,如果性能很重要,确实应该避免这种情况。

最新更新