Ibm midrange 使用RPG变量作为游标名执行SQL语句
我想将游标和数据结构传递给一个过程,然后该过程用sql游标的下一行填充该结构。这可能吗?下面是我试图实现的目标的模板Ibm midrange 使用RPG变量作为游标名执行SQL语句,ibm-midrange,rpgle,rpg,Ibm Midrange,Rpgle,Rpg,我想将游标和数据结构传递给一个过程,然后该过程用sql游标的下一行填充该结构。这可能吗?下面是我试图实现的目标的模板 ***************************************************** * * Fetch the next row from a cursor * * @param cursor - the name of the cursor * @param structure - the data structure to ho
*****************************************************
*
* Fetch the next row from a cursor
*
* @param cursor - the name of the cursor
* @param structure - the data structure to hold the fields
*****************************************************
pfetchNextRow B
DfetchNextRow PI N
d cursor 32767A varying const
d structure DS ???????
/free
exec sql
fetch next from :cursor into :structure
;
if (sqlstate = SQL_SUCCESS);
return *on;
else;
exec sql
close :cursor;
return *off;
endif;
/end-free
pfetchNextRow E
我应该如何传递光标,以及如何定义数据结构参数?我不确定您是否可以动态定义光标。一个问这个问题的好地方是在电视上。该列表中有RPG编译器团队的成员经常回答这样的问题。我不确定您是否可以动态定义游标。一个问这个问题的好地方是在电视上。列表中有RPG编译器团队的成员经常回答类似的问题。我不知道您是否在其他网站上收到了答案,但其他人可能需要它 游标“全局”存在,但仅在声明它们的模块中存在,您无需将其传递到此模块中的过程,您声明的游标在关闭或作业结束之前始终可用 您可以这样做(仅当您在同一模块中时): 这两个过程使用相同的光标“mC”,并且位于同一模块中。 第一个准备、声明并打开游标,第二个获取RowMC中的行 正如您所看到的,用于获取的DS是基于空指示符数组的 所有Like和LikeDS参数都在副本文件中定义为模板,如:
D comfraf e DS extname(comfra00f) QUALIFIED TEMPLATE
D dsSql_0 DS Qualified TEMPLATE
D cid like(comfraf.cid )
D ccap like(comfraf.ccap )
D sqlNI_0 s 5I 0 TEMPLATE
希望这能帮助别人。我不知道你是否在其他网站上收到了答案,但其他人可能需要它 游标“全局”存在,但仅在声明它们的模块中存在,您无需将其传递到此模块中的过程,您声明的游标在关闭或作业结束之前始终可用 您可以这样做(仅当您在同一模块中时): 这两个过程使用相同的光标“mC”,并且位于同一模块中。 第一个准备、声明并打开游标,第二个获取RowMC中的行 正如您所看到的,用于获取的DS是基于空指示符数组的 所有Like和LikeDS参数都在副本文件中定义为模板,如:
D comfraf e DS extname(comfra00f) QUALIFIED TEMPLATE
D dsSql_0 DS Qualified TEMPLATE
D cid like(comfraf.cid )
D ccap like(comfraf.ccap )
D sqlNI_0 s 5I 0 TEMPLATE
希望这能帮助别人。谢谢,我向他们注册了谢谢,我向他们注册了,只是想快速指出这个答案中的错误。用于提取的DS(
Rowmc
)不基于Rowmc_b
是基于的,直接位于Rowmc
之上。使用“基于”是一种预模板技术,可以定义什么本质上是一个模板,只要您从不以任何内容为基础。在您的示例中,Rowmc_b
和pNull1
是不必要的。同样的评论也适用于空指示器阵列(NullImc
)及其周围的结构。谢谢@jmarkmurphy,正如你看到的2011年的答案一样,桥下已经有一滴水飞了!!!谢谢你指出,你真的是对的。目前我还没有办法测试一个新的更新答案,这里发布的答案仍然有效,但有点多余,希望有办法编写和测试一个新的答案。非常感谢。因为基于的答案只是一个误解,我的意思是获取所指的变量是基于/模板化的(基于是6.1之前定义模板的方法之一)。对于“Rowmc_b”和“pNull1”,可能是copy和pass旧变量。只想快速指出这个答案中的错误。用于提取的DS(Rowmc
)不基于Rowmc_b
是基于的,直接位于Rowmc
之上。使用“基于”是一种预模板技术,可以定义什么本质上是一个模板,只要您从不以任何内容为基础。在您的示例中,Rowmc_b
和pNull1
是不必要的。同样的评论也适用于空指示器阵列(NullImc
)及其周围的结构。谢谢@jmarkmurphy,正如你看到的2011年的答案一样,桥下已经有一滴水飞了!!!谢谢你指出,你真的是对的。目前我还没有办法测试一个新的更新答案,这里发布的答案仍然有效,但有点多余,希望有办法编写和测试一个新的答案。非常感谢。因为基于的答案只是一个误解,我的意思是获取所指的变量是基于/模板化的(基于是6.1之前定义模板的方法之一)。对于“Rowmc_b”和“pNull1”,右边可能是copy和pass旧变量。