2015-12-22 162 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。

我希望這會有所幫助。