我正在尝试从另一个存储过程调用存储过程。 我尝试了不同的语法但没有成功。
第一个存储过程返回一个表。对于测试,我只想从第二个存储过程返回第一个存储过程。
第一个存储过程(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:
创建查询QUERY2SELECT * FROM QUERY1;
甚至像桌子一样加入
SELECT * FROM TABLE1 INNER JOIN QUERY1 ON (TABLE1.FIELD1 = QUERY1.FIELD1);
我需要将所有表和查询从mdb移动到AS400并编写一个使用这些查询的C#应用程序。
我在网上看不到这么多例子,也许我的方法是错的。 我有多个查询要运行,每个查询都依赖于另一个查询。我想从我的C#应用程序调用一个存储过程,这个将调用另一个存储过程,依此类推。 这是一种运行一系列相互依赖的查询的正确方法吗?
或者有没有办法从我的c#应用程序中独立调用所有查询,并从代码中构建它们之间的依赖关系,看起来这种方法是错误的?
答案 0 :(得分:1)
如果您使用的是IBM i 6.1或更早版本,则无法使用语言SQL存储过程访问存储过程返回的结果集。对于7.1或更高版本,可以使用ASSOCIATE RESULT SET LOCATORS语句来检索结果集。有关详细信息,请参阅SQL Reference手册(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