簡體   English   中英

AS400從另一個存儲過程調用存儲過程

[英]AS400 Call a stored procedure from another stored procedure

我試圖從另一個存儲過程中調用存儲過程。 我嘗試了不同的語法,但沒有成功。

第一個存儲過程返回一個表。 對於測試,我只想從第二個存儲過程中返回從第一個存儲過程中得到的結果。

第一個存儲過程(SP01):

BEGIN
DECLARE C2 CURSOR WITH RETURN FOR

SELECT DISTINCT TBL.*
FROM LIB.TABLE1 TBL;

OPEN C2 ;
END 

從c#調用時效果很好。

第二個存儲過程(SP02):

BEGIN
DECLARE C2 CURSOR WITH RETURN FOR

CALL SP01();

OPEN C2 ;
END 

我收到一個錯誤:

供應商代碼:-104
消息:[SQL0104]令牌SP01無效。 有效令牌:;。 原因...
在令牌SP01處檢測到語法錯誤。

SP02的正確語法/方法是什么?

編輯:

在ms access中,我能夠基於另一個查詢QUERY1創建查詢QUERY2:

SELECT * FROM QUERY1;

甚至像桌子一樣加入

SELECT * FROM TABLE1 INNER JOIN QUERY1 ON (TABLE1.FIELD1 = QUERY1.FIELD1);

我需要將所有表和查詢從mdb移動到AS400,並編寫一個使用這些查詢的C#應用​​程序。

我在網上看不到太多例子,也許我的方法是錯誤的。 我有多個查詢要運行,每個查詢都依賴於另一個查詢。 我以為從我的C#應用​​程序中調用一個存儲過程,而這個將調用另一個存儲過程,依此類推。 運行一系列相互依賴的查詢是否正確?

還是有一種方法可以從我的c#應用程序中獨立地調用所有查詢,並通過代碼來建立它們之間的依賴關系,看起來這種方法是錯誤的?

如果使用的是IBM i版本6.1或更早版本,則無法使用語言SQL存儲過程訪問存儲過程返回的結果集。 對於7.1或更高版本,您可以使用ASSOCIATE RESULT SET LOCATORS語句檢索結果集。 有關更多信息,請參見SQL參考手冊( http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_71/db2/rbafzassocloc.htm?lang=en )中的ASSOCIATE LOCATORS語句。

找到定位器后,就可以使用ALLOCATE CURSOR語句( http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzalloccsr.htm?lang=en )從結果集定位器中獲取光標。

可以在這里找到更多示例: http : //www.itjungle.com/fhg/fhg082510-printer02.html

暫無
暫無

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

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