[英]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.