IBM大型机论坛索引
 
登录
 
IBM大型机论坛索引 大型机:搜索 IBM Mainframe论坛:常见问题解答 寄存器
 

如何在COBOL程序中处理NULL


IBM大型机论坛 -> COBOL程式设计
发表新话题   回复主题
查看上一个主题 :: 查看下一个主题  
作者 信息
bhaskar_kanteti

活跃用户


已加入:2007年2月1日
职位:123
地点:海得拉巴

发布发表于:星期一十月07,2019 3:54下午
引用回复

你好

我正在使用COBOL程序(Non-DB2)创建输出文件,该文件将用作下一步使用IBM Utility加载到DB2 Table的输入。

我想知道如何在我的COBOL程序中处理NULL。

可以说,我在表INTEREST中的字段定义如下
码:

利益                  POSITION(26)
SMALLINT
     NULLIF(28)='?'


在我的COBOL程序中,我在输出抄本中将WS-INTEREST定义为S9(4)COMP。
如何在我的输出抄写本中定义NULL?这样,在使用DB2 Utility加载到表时将插入VALUE或NULL。
回到顶部
查看用户资料 发送私信
尼克·克劳斯顿

全球主持人


加入时间:2007年5月10日
帖子:2455
地点:英国汉普郡

发布发表于:星期一十月07,2019 4:19下午
引用回复

阅读“应用程序编程和SQL指南”,特别是“在COBOL应用程序中编码SQL语句”一章和“在COBOL中声明主机变量和指示符变量”一节
回到顶部
查看用户资料 发送私信
罗希特·乌马尔吉卡(Rohit Umarjikar)

全球主持人


已加入:2010年9月21日
帖子:2582
地点:美国纽约

发布发表于:星期一十月07,2019 6:48下午
引用回复

Nic,OP具有Non-Db2程序,因此您建议的内容将不再是一种选择,因为该程序仅创建了加载ds。

Bhaskar,NULL是数据库术语/概念。通常,低值或x'00'或x'FF'会检查不良值,您可以说它们为NULL值。但是同样,没有标准如何处理什么值。
一种实现所需目标的方法是在执行INSERT而不是在COBOL程序中使用NULLIF。
回到顶部
查看用户资料 发送私信
bhaskar_kanteti

活跃用户


已加入:2007年2月1日
职位:123
地点:海得拉巴

发布发表于:星期一十月07,2019 8:28下午
引用回复

嗨,罗希特(Rohit)和尼克(Nic),

感谢您的详细信息。

我在下面的IBM链接中找到并在我的COBOL程序中进行了更改。
www.ibm.com/support/knowledgecenter/zh-CN/SSXJAV_13.1.0/com.ibm.filemanager.doc_13.1/db2/motnib.html

我在输出抄写本中定义了INTEREST字段,如下所示:
码:

05  WS-INTEREST.
     10 WS-INTEREST-NULL X(01).
      10 WS-INTEREST-VAL   S9(04) COMP.


我在输出中将NULL指示符定义为X(01)(如在DB2表中,NULL指示符NULLIF为1字节)。

然后在COBOL程序中将X'00'移至有效输入值,将X'FF'移至null。

我将使用上面的输出测试DB2 Utility,并发布结果。

如果我错了,请纠正我。
回到顶部
查看用户资料 发送私信
罗希特·乌马尔吉卡(Rohit Umarjikar)

全球主持人


已加入:2010年9月21日
帖子:2582
地点:美国纽约

发布发表于:星期一十月07,2019 8:48下午
引用回复

我不明白为什么这是个问题,同时您也可以考虑是否在INSERT期间使用NULLIF。
回到顶部
查看用户资料 发送私信
尼克·克劳斯顿

全球主持人


加入时间:2007年5月10日
帖子:2455
地点:英国汉普郡

发布发表于:星期一十月07,2019 10:44下午
引用回复

Rohit,他正在创建要由DB2实用程序加载的文件,因此需要null指示符。
回到顶部
查看用户资料 发送私信
罗希特·乌马尔吉卡(Rohit Umarjikar)

全球主持人


已加入:2010年9月21日
帖子:2582
地点:美国纽约

发布发表于:星期一十月07,2019 11:55下午
引用回复

那是正确的尼克。但是,由于它纯粹是COBOL程序,因此他不需要“在COBOL应用程序中编码SQL语句”。那是我的意思。
回到顶部
查看用户资料 发送私信
尼克·克劳斯顿

全球主持人


加入时间:2007年5月10日
帖子:2455
地点:英国汉普郡

发布发表于:周二十月08,2019 1:07上午
引用回复

关键是手册的这一部分解释了要求的内容。

编辑:确定。我可能应该从索引而不是目录开始搜索。从内容开始,我直接进入COBOL章节(第6章),而如果我从索引开始,我将进入第3章(在应用程序中对SQL语句进行编码:常规信息),其中解释了指示符变量。

所有参考文献都是我所拥有的手册的版本:SC19-4051-01
回到顶部
查看用户资料 发送私信
谢尔盖肯

活跃的成员


已加入:2008年4月29日
帖子:940
所在地:马里兰

发布发表于:周四十月10,2019 10:53下午
引用回复

bhaskar_kanteti写道:
我正在使用COBOL程序(Non-DB2)创建输出文件,该文件将用作下一步使用IBM Utility加载到DB2 Table的输入。

我想知道如何在我的COBOL程序中处理NULL。

可以说,我在表INTEREST中的字段定义如下
码:

利益                  POSITION(26)
SMALLINT
     NULLIF(28)='?'


在我的COBOL程序中,我在输出抄本中将WS-INTEREST定义为S9(4)COMP。
如何在我的输出抄写本中定义NULL?这样,在使用DB2 Utility加载到表时将插入VALUE或NULL。

在这篇文章中以及在您的脑海中,有两个完全不同的实体。

给定的定义
码:
。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。
利益 POSITION(26) SMALLINT
     NULLIF(28)='?'
。 。 。 。 。 。 。 。 。 。 。 。 。 。

实际上不是DB2 TABLE FIELD DEFINITION,而是 平面文件字段的定义 由DB2 LOAD / UNLOAD实用程序用于在DB2表之间移动数据。

我希望原始表定义(以DDL表示法)如下所示:
码:
 创建表SAMPLE_TABLE(
   。 。 。 。 。 。 。 。 。 。 。 。 ,
   INTEREST              SMALLINT,     <-允许为NULL!
   。 。 。 。 。 。 。 。 。 。 。 。 。 。
) ;

相应的COBOL记录布局应处理此问题 实际的DB2表 在任何COBOL程序中可能如下所示:
码:
 . . . . . . . . .
     01 DB2-SAMPLE-TABLE。
         05 COBOL-FIELDS.
           。 。 。 。 。 。 。 。 。 。 。
            10 利益              PIC 9(4) COMP.
           。 。 。 。 。 。 。 。 。 。 。

在执行某些SQL之后,将从DB2数据库表中填充COBOL代码中的该记录。通常-FETCH…INTO…
同样,通常通过INSERT / UPDATE SQL语句,可以使用COBOL代码中此记录中的字段值来插入/更新DB2数据库中的表行。

当从DB2将该表卸载到顺序数据集(新手将其称为“平面文件”)时,典型的Unload实用程序将创建三个实体:
1)DSORG = PS,RECFM = FB,LRECL =按效用计算的数据集)
2)一组实用程序控制语句,用于将卸载的表加载到不同的(或相同的)DB2数据库中。看起来像
码:
 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。
载入资料..."owner"."SAMPLE_TABLE"
(
   。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。
   INTEREST        POSITION(26)   SMALLINT 空IF(28) = '?' ,
   。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。
) ;

3)(并非总是自动创建,但必须假定)-已卸载数据集中已创建数据的记录布局:
码:
 . 。 。 。 。 。 。 。 。 。
     01 DB2-UNLOADED-SAMPLE-TABLE。
         05 COBOL-DATA.
           。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。
            10 利益              PIC 9(4) COMP.
            10 利益-IF           PIC X.
               88 利益-NULL      VALUE '?'.
           。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。
         

如果必须创建一个数据集以供DB2加载实用程序以后使用,则需要根据最后一个记录布局示例来处理此文件的记录, 但不能作为真正的DB2表的布局!

请记住,不同的DB2加载/卸载实用程序,以及 甚至具有不同运行模式的同一实用程序! 在卸载记录的格式上可能使用不同的约定;在用COBOL编写代码之前,需要仔细验证这一点。
回到顶部
查看用户资料 发送私信
查看上一个主题 :: :: 查看下一个主题  
发表新话题   回复主题 查看书签
所有时间均为格林尼治标准时间+ 6小时
论坛索引 -> COBOL程式设计

 


类似主题
话题 论坛 回覆
该主题已锁定:您无法编辑帖子或回复。 将字段名称传递给COBOL程序 COBOL程式设计 10
没有新帖 COBOL性能调整 COBOL程式设计 6
没有新帖 JCL用于替换Cobol中的代码 JCL和VSAM 7
没有新帖 COBOL VS SORT实用程序,用于文件格式... COBOL程式设计 6
该主题已锁定:您无法编辑帖子或回复。 示例CICS Web服务程序 CICS 1
搜索我们的论坛:


回到顶部