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



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

第一个存储过程返回一个表。对于测试,我只想从第二个存储过程返回我从第一个存储过程获得的内容。

第一个存储过程 (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访问中,我能够基于另一个查询QUERY1创建一个查询QUERY2:

SELECT * FROM QUERY1;

甚至像桌子一样连接它

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

我需要将所有表和查询从 mdb 移动到 AS400,并编写使用这些查询的 C# 应用程序。

在网上没有看到那么多例子,也许我的做法是错误的。我有多个查询要运行,每个查询都依赖于另一个查询。我以为从我的 C# 应用程序调用一个存储过程,这个存储过程将调用另一个存储过程,依此类推。运行一系列相互依赖的查询是否是一种正确的方法?

或者有没有办法从我的 c# 应用程序独立调用所有查询并从代码调用它们之间的依赖关系,看起来这种方法是错误的?

如果您使用的是 IBM i V6.1 或更低版本,那么无法使用语言 SQL 存储过程访问存储过程返回的结果集。 对于 V7.1 或更高版本,可以使用关联结果集定位符语句来检索结果集。 有关详细信息,请参阅 SQL 参考手册 (http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_71/db2/rbafzassocloc.htm?lang=en) 中的关联定位器语句。

获得定位器后,可以使用 ASSIGN 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

相关内容

  • 没有找到相关文章

最新更新