>我正在尝试从另一个存储过程调用存储过程。我尝试了不同的语法,但没有成功。
第一个存储过程返回一个表。对于测试,我只想从第二个存储过程返回我从第一个存储过程获得的内容。
第一个存储过程 (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