Как правильно объявить DCB в JCL / ассемблере для QSAM put-locate - PullRequest
2 голосов
/ 16 июля 2011

Я пытаюсь написать программу, которая запишет некоторые данные во временный набор данных, используя 370 / ассемблер и QSAM.Я получаю soc01 при выполнении пута.

Моя декларация 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 выглядит следующим образом:

         PUT    TEMPFILE                                                
         MVC    0(25,1),HIGHSALE

Я подозреваю, что проблема заключается в моей декларации JCL, но мне не повезло найти что-либо.

1 Ответ

2 голосов
/ 17 июля 2011

Вы получаете S0C4 , т. Е. Вы пытаетесь получить доступ к хранилищу, которое вам не принадлежит. Предполагая, что вы уже определили (из PSW или с помощью других средств), что указание на завершение работы содержится в некотором коде, в который распространяется макрос PUT , и что в вашем списке сборок нет сообщений с указанием «нет активного использования для ...», где регистр 1 указывает на? Поскольку вы используете режим поиска, регистр 1 должен указывать на ваши данные.

Как примечание, я обычно не вижу размер блока, закодированный в макросе DCB в программе. Большинство магазинов используют размер блока, определенный системой, и поэтому вы никогда не увидите его ни в программе, ни в JCL. Ничего не повредит, если вам удобнее это кодировать.

...