簡體   English   中英

限制的解決方法:不能在 Execute Immediate 語句中執行另一個 Execute Immediate 語句

[英]Workaround for restriction: Another Execute Immediate statement cannot be executed inside an Execute Immediate statement

我了解 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 class 的調用。 但是,我使用的 SAP 16 評估版存在問題。 根據 SAP 的說法,可從該頁面下載的版本包含執行 java 類的錯誤,這些類已通過補丁進行了糾正(無法免費下載)。

因此,我正在以實施此解決方案的方式評估其他選項。

如果您有類似的問題或關於如何以不同方式解決它的任何想法,我將不勝感激您的想法。

從您的問題中的鏈接: execute命令, execute命令有兩種不同的用途:

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!", @procname, @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...而不是運行execute ( 'store_proc_name_as_a_string...' )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM