Если вам интересна причина, поймите, что IEFBR14 фактически не открывает ни один из операторов DD, которые вы кодируете в своем JCL. Скорее, это просто сокращенный способ управления процедурами выделения (и освобождения) системы. Действительно, если бы вы взглянули на список ассемблера iEFBR14, то обнаружили бы, что это всего лишь две инструкции: установите код возврата R15 на ноль и завершите работу.
С пакетной обработкой идея заключается в том, что система (JES плюс инициатор пакетной обработки) должна выполнить большую часть работы еще до запуска приложения. Таким образом, если вы выделяете новый набор данных или ссылаетесь, скажем, на ленточное устройство, которое требует времени для монтирования оператора, система сделает все это за вас еще до запуска вашей программы. IEFBR14 - это удобный способ использовать процедуры выделения системы для выделения файлов с использованием этих возможностей JCL.
Но есть ловушка, когда дело доходит до доступа к наборам данных PDS в JCL, как вы пытаетесь это сделать.
Когда вы задаете синтаксис DSN (MEMBER) в JCL, процедуры выделения не особенно заботятся о части MEMBER - оказывается, это не функция инициатора, а вместо этого реализуется в OPEN / CLOSE. В вашем примере, распределение подтверждает, что набор данных существует (так как вы закодировали DISP = SHR), и когда программа ОТКРЫВАЕТ оператор DD, процедуры OPEN автоматически выдают BPAM FIND / POINT / STOW, чтобы получить вас к указанному вами члену PDS. Вот как создается ваш член PDS, и поэтому вам нужно использовать программу, которая фактически открывает файл (IEBGENR, IEBUPDTE, IEBCOPY, IDCAMS и т. Д. Все будет работать).
Один небольшой несвязанный комментарий заключается в том, что вы можете быть осторожны при обновлении наборов данных (особенно PDS) с помощью DISP = SHR. Если вам удастся ошибиться во времени, теоретически две из этих задач могут работать одновременно, и это может привести к повреждению вашего набора данных. Если вы не уверены, что являетесь единственной задачей, осуществляющей доступ к PDS, в этом случае безопаснее использовать DISP = OLD.