Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1269029
  • 博文数量: 287
  • 博客积分: 11000
  • 博客等级: 上将
  • 技术积分: 3833
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-16 08:43
文章分类
文章存档

2013年(15)

2012年(17)

2011年(17)

2010年(135)

2009年(85)

2008年(18)

分类: 系统运维

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没有定义信息,或不可用。

 

我认为,*inputread/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的矛盾就可以解决了。

阅读(1455) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

qwinds3212010-06-02 16:55:32

虽然看得不是很懂,还是要强力支持!!