2013-05-25 46 views
0

我在jcl中執行了一個bmcunld來將輸出導向到數據集。 的問題是,這一領域有最大的大小,我不能讀之後所創建的數據集,因爲它會發出格蘭以下錯誤信息:在jcl中調整表卸載輸出字段

"Invalid Record Length" 

這是我卸載的樣本:

//A00BMC EXEC PROC=BMCUNLD,UTILID=%%JOBNAME,PARAM='NEW',COND=(0,NE), 
//   SUBSYS=subsys             
//SYSREC DD DSN=datasetname,        
//   DISP=(NEW,CATLG),           
//   SPACE=(CYL,(10,10),RLSE),       
//   DCB=(RECFM=FB,LRECL=1000,BLKSIZE=0)    
//SYSIN DD *             
    UNLOAD               
    DIRECT NO             
    SELECT a.data, a.codent, b.text       
    FROM owner.table_view A,owner.table2_view B 
    WHERE a.cmarca='S' AND a.cestado='P' AND A.codrc='OK'   
    AND DATE(A.data) > CURRENT DATE - 2 DAYS     
    AND B.cmarca = A.cmarca         
    AND B.chave = A.data         
    WITH UR;         

能這個問題只能通過使用這個數據集作爲OUTREC PARSE的SORT的輸入來解決,或者我可以在查詢中解決直接問題嗎?

+1

不熟悉BMC的產品,但...輸出數據集的LRECL和DSORG是什麼? SELECT語句中列的特徵是什麼?如果你有一個VARCHAR列,其內容你知道總是少於一些較短的固定長度,你可以把它作爲一個短的長度的CHAR來投射。根據您正在閱讀的輸出數據集,可能錯誤還有其他一些根本原因。 – cschneid

+0

對於輸出數據集的DCB屬性,ISPF 3.1或TSO LISTD顯示了什麼?你運行什麼程序顯示錯誤信息? – zarchasmpgmr

+0

對於卸載,我懷疑LRECL必須匹配被提取的行的長度,因此「無效記錄長度」。仔細查看輸出消息以查看是否指定了預期的LRECL –

回答

0

你BLKSIZE看起來很奇怪 - 你有RECFM = FB,LRECL = 1000,BLKSIZE = 0

最起碼我希望RECFM = FB,LRECL = 1000,BLKSIZE = 1000

你可能會得到根本不指定BLKSIZE(通過不給予),但通常BLKSIZE需要是LRECL的非零倍數。通常情況下,特別是如果您的商店有系統管理存儲(SMS),系統本身將分配適合您正在創建的文件的最佳BLKSIZE。然而,你的例子BLKSIZE = 0甚至不允許一個記錄被存儲在一個塊中。