2011-07-16 47 views
2

我在編寫一個程序,它將使用370 /彙編程序和QSAM將一些數據寫入臨時數據集。執行put時,我會得到一個soc01。如何在JCL /彙編器中正確聲明DCB用於QSAM put-locate

在彙編代碼

我的DCB聲明如下所示:

TEMPFILE DCB DDNAME=TEMP,           X 
       DEVD=DA,            X 
       DSORG=PS,            X 
       MACRF=PL,GL,           X 
       RECFM=FBA,            X 
       LRECL=25,            X 
       BLKSIZE=3000,           X 
       EODAD=EOF3 

在JCL中,聲明如下所示:

//TEMP  DD DSN=&&TEMP,UNIT=PUB,DISP=(MOD,KEEP,DELETE), 
//   DCB=(LRECL=25,BLKSIZE=3000) 

及認沽命令如下:

  PUT TEMPFILE             
     MVC 0(25,1),HIGHSALE 

我懷疑問題在於我的JCL聲明,但我沒有任何運氣findi任何東西。

+0

我將dcb宏的Macrf部分改爲macrf =(pl,gl),顯然這就是它應該被寫入的方式。相反,我得到一個soc04錯誤。所以宏觀如下。 TEMPFILE DCB DDNAME = TEMP, DEVD = DA, DSORG = PS, MACRF =(PL,GL), RECFM = FBA, LRECL = 25, BLKSIZE = 3000, EODAD = EOF3 – IGYCRCTL

+0

/嘆息;我分開了開放指令。 感謝您的幫助。 – IGYCRCTL

回答

2

您會得到一個S0C4,即您嘗試訪問不屬於您的存儲。假設您已經(通過PSW或通過其他方式)確定了異常指示是在您的宏擴展出的PUT的一些代碼中,並且您的程序集列表中沒有消息指示「沒有活動使用for ...「,寄存器1指向哪裏?由於您使用定位模式,註冊1必須指向您的數據。

就像旁註一樣,我通常不會在程序中看到DCB宏中的塊大小編碼。大多數商店正在使用系統確定的塊大小,因此在程序或JCL中都不會看到它。如果你更舒適地編碼它,它不會傷害任何東西。