微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

限制的解决方法:另一个 Execute Immediate 语句不能在 Execute Immediate 语句中执行

如何解决限制的解决方法:另一个 Execute Immediate 语句不能在 Execute Immediate 语句中执行

我了解 SAP ASE 有一个 restriction for nested execute commands

因此以下代码显示错误

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 类的错误,这些类已通过补丁(不可免费下载)进行修正。

因此,我正在评估实施此解决方案的其他选项。

如果您有类似的问题或任何关于如何以不同方式解决它的想法,我会很感激您的想法。

解决方法

从您问题中的那个链接:execute 命令,execute 命令有 2 种不同的用法:

execute <stored_proc_name>

-- and

execute ( <string> )

碰巧 <stored_proc_name> 可以通过@variable 实现,例如:

declare @procname  varchar(255),@arg1      varchar(30)

---------------

select  @procname = 'sp_help',@arg1     = 'sysobjects'

print "########################### %1! %2!",@procname,@arg1

exec @procname @arg1

---------------

select  @procname = 'sybsystemprocs..sp_help',@arg1     = 'sp_helpdb'

print "########################### %1! %2!",@arg1

exec @procname @arg1
go

这会产生:

########################### sp_help sysobjects

 Name       Owner Object_type  Object_status Create_date         
 ---------- ----- ------------ ------------- ------------------- 
 sysobjects dbo   system table  -- none --   Jan 23 2016  9:52AM 

(1 row affected)
 Column_name  Type              Length Prec Scale Nulls Not_compressed

... snip ...

########################### sybsystemprocs..sp_help sp_helpdb

 Name      Owner Object_type      Object_status Create_date         
 --------- ----- ---------------- ------------- ------------------- 
 sp_helpdb dbo   stored procedure  -- none --   Jul 17 2020 12:11PM 

(1 row affected)
 Parameter_name Type    Length Prec Scale Param_order Mode 
 -------------- ------- ------ ---- ----- ----------- ---- 
 @dbname        varchar    255 NULL  NULL           1 in   
 @order         varchar     20 NULL  NULL           2 in   
(return status = 0)

我不知道您的代码结构,但我想知道您是否可以在您的顶级代码中使用 execute ( 'store_proc_name_as_a_string ...' ) 代替运行 execute @store_proc_name ...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?