COBOL开发中DCLGEN主变量歧义编译报错的解决方案咨询
重名DCLGEN主变量歧义问题解决方案
- 使用组名限定重名主变量:标准DCLGEN生成的主变量默认会以表名作为01级组项名,引用主变量时带上对应DCLGEN的组名前缀即可直接消除歧义,无需修改原有DCLGEN文件。例如DCLTBL1下的COLUMN1字段写为
:DCLTBL1.COLUMN1,DCLTBL2下的同名字段写为:DCLTBL2.COLUMN1,编译器可根据前缀定位到正确的变量声明。 - 为DCLGEN指定差异化前缀:重新生成两张表的DCLGEN文件时,分别设置不同的主变量前缀。例如为TBL1指定前缀
T1_,生成的COLUMN1对应主变量为:T1_COLUMN1,为TBL2指定前缀T2_,对应主变量为:T2_COLUMN1,从根源上避免命名冲突。 - 自定义查询列别名+手动声明主变量:如果无法修改DCLGEN生成规则,可给SELECT查询的返回列设置唯一别名,同时在WORKING-STORAGE SECTION手动声明无重名的主变量用于接收查询结果,参考写法如下:
* 工作存储节手动声明唯一主变量 01 HOST-TBL1-COL1 PIC X(10). 01 HOST-TBL1-COL2 PIC X(20). EXEC SQL SELECT A.COLUMN1 AS TBL1_COL1, A.COLUMN2 AS TBL1_COL2 INTO :HOST-TBL1-COL1, :HOST-TBL1-COL2 FROM TBL1 A INNER JOIN TBL2 B ON A.COLUMN1 = B.COLUMN2 WHERE A.COLUMN1 = :HOST-VARIABLE1 AND A.COLUMN2 = :HOST-VARIABLE2 END-EXEC.
内容的提问来源于stack exchange,提问作者Sandeep Prajapati
相关产品推荐
相关产品推荐

