AS400 从另一个存储过程调用一个存储过程

AS400 Call a stored procedure from another stored procedure

我正在尝试从另一个存储过程调用一个存储过程。 我尝试了不同的语法但没有成功。

第一个存储过程return是一个table。对于测试,我只想从第二个存储过程中 return 我从第一个存储过程中得到的东西。

第一个存储过程 (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 

我收到一个错误:

Vendor Code: -104
Message: [SQL0104] Token SP01 was not valid. Valid tokens: ;. Cause ....
A syntax error was detected at token SP01.

SP02 的正确语法/方法是什么?

已编辑:

在 ms access 中,我能够基于另一个查询 QUERY1 创建查询 QUERY2:

SELECT * FROM QUERY1;

甚至像 table

一样加入其中
SELECT * FROM TABLE1 INNER JOIN QUERY1 ON (TABLE1.FIELD1 = QUERY1.FIELD1);

我需要将所有 table 和查询从 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) 从 RESULT SET LOCATOR 获取游标。

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