2015-12-22 166 views
0

我试图从表中取出一些数据。变量是VARCHAR 30000,当我使用COBOL EXEC SQL检索它时,字符串被返回,但没有必要的(十六进制)换行符和回车符。我一次检查字符串的一个字符,寻找0A或0D的十六进制值,但他们从未出现。DB2到COBOL字符串丢失换行符和回车换行

只要将字符串填充到我的cobol变量中,LF和CR似乎就会丢失。

想法?

+2

您不指定数据的来源,您确定该列包含x'0A'和x'0D'?如果您尝试使用其他工具检索数据,那么这些值是否存在? – cschneid

+0

您知道,除非将与CR和LF相关的那些特定十六进制值包含为数据,否则它们将不会存储在z/OS DB2 VARCHAR中。是?你不只是假设z/OS和COBOL有“字符串”,因为它们不是。 –

+0

为什么不寻找ebcdic New-Line charachter(x'15'dec = 21 ??)。大多数java程序都很乐意使用ebcdic,并会正确处理ebcdic新行 –

回答

0

我已经看到CR和LF在数据库中的数据。这些是有效的字符,因此可以将它们存储在那里。

你有没有试过,以确认是否真的在数据库CR和LF字符使用一些其他的工具或方法?我的Z系列的经验是相当有限的,所以我无法建议选择。但是,Z系列上必须有一些等效的SSMS和SQL Server才能查询DB2数据库。

查看此链接查询DB2并清除CR和LF字符。

DB2/iSeries SQL clean up CR/LF, tabs etc

+1

这看起来像一个评论,而不是一个答案... –

+0

当别人问“你不能在这里”,“你怎么确定?”时,这是程序员101的宗旨。 – Kennah

1

如果数据存储/ 转换为EBCDIC时主机上检索,你应该得到的EBCDIC换行字符X'15' 十进制=而非0A或0D 21。

只有当您检索在ASCII/UTF-8的数据,你会得到0A或0D。


大多数Java编辑器可以编辑EBCDIC(与EBCDIC换行字符X'15' )一样容易,ASCII(含\ n)的,不知道关于Eclipse虽然。

0

嗯,我认为这可能是依赖于方言(包括COBOL和DB2),但如果是我,我将用在表中定义的VARCHAR位数据。您的问题也可能与为该表所在的数据库定义的代码页相关。

我经常在同一个VARCHAR FOR BIT DATA列中混合存储各种二进制,EBCDIC和Unicode数据,而且没有任何问题,并且您尝试执行的操作仅包括CR & LF。我的方法适用于DB2 z/OS和DB2 LUW。

我希望这会有所帮助。