【问题标题】:AS400 Call a stored procedure from another stored procedureAS400 从另一个存储过程调用一个存储过程
【发布时间】:2016-01-18 13:56:48
【问题描述】:

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

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

第一个存储过程(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# 应用程序独立调用所有查询并从代码中建立它们之间的依赖关系,看起来这种方法是错误的?

【问题讨论】:

  • 不应该是exec sp02 吗?
  • 数据库? MySQL ?甲骨文? MS SQLServer ?
  • @rdn87 数据库是 AS400
  • @Ehsan Sajjad 执行不工作,谢谢

标签: c# database stored-procedures db2 ibm-midrange


【解决方案1】:

如果您使用的是 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

【讨论】:

    猜你喜欢
    • 2014-09-17
    • 2010-11-14
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多