我了解 SAP ASE对嵌套执行命令有限制。
因此,以下代码显示错误:
DROP PROCEDURE sp_proc1
CREATE PROCEDURE sp_proc1
AS
BEGIN
DECLARE @cmd VARCHAR(20)
SET @cmd = 'SELECT GETDATE()'
EXEC (@cmd)
END
EXEC sp_proc1
DROP PROCEDURE sp_proc2
CREATE PROCEDURE sp_proc2
AS
BEGIN
DECLARE @cmd VARCHAR(20)
SET @cmd = 'sp_proc1'
EXEC (@cmd)
END
EXEC sp_proc2
错误:
Another Execute Immediate statement cannot be executed inside an Execute Immediate statement., Error 11039, Procedure sp_proc1, Line 6
这是我要解决的实际问题。也许有人可以想出一个更好的方法来处理它。我有一个必须动态执行的存储过程名称列表,此逻辑在初始存储过程中实现。
这些动态运行的存储过程中的每一个都可以包含对其他存储过程的调用。这些内部存储过程又可以具有动态语句执行命令。例如,其中一个过程接收表的名称,查询表的字段和数据类型,详细说明创建语句并创建具有相同结构和不同名称的表的副本(虚拟表)。
由于限制,我被迫使用包装来自 java 类的调用的存储过程来调用第一个存储过程。但是,我使用的 SAP 16 评估版存在问题。根据 SAP 的说法,可从该页面下载的版本包含实现 Java 类的错误,这些错误已通过补丁进行了纠正(无法免费下载)。
因此,我正在以实施此解决方案的方式评估其他选项。
如果您有类似的问题或关于如何以不同方式解决它的任何想法,我将不胜感激您的想法。