全部博文(287)
分类: 系统运维
2010-06-02 16:52:02
SQLRPGLE中对带*input数据结构冲突分析和解决方法
在SQLRPGLE中,定义一个FetchDs用于Read/Chain。同时,这个FetchDs也用于SQL语句中。
FDataFile IF E K disk
……
D FetchDs DS extname(DataFile:*input)
...
chain key DataFile FetchDs;
这时的代码没有问题。但是在同一个SQLRPGLE中,如果采用:
Exec Sql Fetch next from SQLCsr into :FetchDS;
SQL预编译会报FetchDS没有定义信息,或不可用。
我认为,*input对read/Chain有效。在这种情况下,如果用在sql语句中,作为into:的动作的目标话,相当于*input,所以sql预编译就会报信息。
如果在定义FetchDs时不引用*input,
D FetchDs DS extname(DataFile)
这时SQL编译和使用都没有问题。但是,RPGIV使用Read/Chain就没法得到数据。
上述的代码如果改为:
D FetchDs1 DS extname(DataFile:*input)
//FetchDs1 for Read/Chain
D FetchDs2 DS extname(DataFile)
//FetchDs2 for SQL output
这个重复定义*input的矛盾就可以解决了。