Как COBOL хранит и извлекает данные?[закрыто]
-
19-09-2019 - |
Вопрос
Я начинаю узнавать о COBOL.У меня есть некоторый опыт написания программ, которые имеют дело с базами данных SQL, и я предполагаю, что меня смущает, как COBOL хранит и извлекает данные, которые хранятся, например, в мэйнфрейме.Я знаю, что это не похоже на реляционные базы данных, но каждый пример программы, который я видел, берет данные прямо из командной строки, и я знаю, что реальные программы COBOL обрабатывают данные не так.Может ли кто-нибудь объяснить или показать мне хороший ресурс, который может это объяснить?
Решение
COBOL - это всего лишь еще один компьютерный язык третьего поколения.Он просто немного старше большинства, что не означает, что он какой-то неполный (на самом деле к нему прилагается довольно большой багаж - но это уже другая история).
Как и в случае с любым другим языком третьего поколения, COBOL манипулирует файлами данных практически так же, как вы бы это делали в программе на языке Си.В этом нет ничего странного, таинственного или волшебного.Файлы открываются, считываются, записываются и закрываются с использованием функций файлового ввода-вывода данного языка.
Для формирования связи между реальным файлом и программой используются различные механизмы.Приведенные здесь сведения часто относятся к операционной системе, под управлением которой вы работаете.Как правило, реализации COBOL пытаются изолировать себя от операционной среды с помощью логического имени файла, а не фактического имени.Эта дополнительная косвенность важна при написании программ, которые будут портированы на разные платформы (напримернапишите и протестируйте в среде IDE на платформе Windows, а затем запустите на мэйнфрейме).
Следующие примеры относятся к среде мэйнфреймов IBM.
В мире мэйнфреймов IBM вы обнаружите, что программы выполняются либо в пакетном режиме, либо в режиме онлайн (напримерCICS).Я не буду описывать, как настроить файловый ввод-вывод в CICS (это долгая история).Программы, которые используются для манипулирования файлами, обычно являются пакетными.Вот грубая иллюстрация того, как работает пакетное программное обеспечение:
Пакетные программы запускаются через JCL.JCL используется для определения программы для запуска (инструкция 'EXEC') и для определения, на какие файлы будет ссылаться ваша программа, используя инструкции 'DD'.Функция оператора DD заключается в формировании логической связи между реальным файлом и именем, на которое будет ссылаться ваша программа COBOL, когда она захочет обратиться к файлу (это механизм изоляции, упомянутый ранее).Например,
JCLDDNAM DD DSN='HLQ.MY.FILE'...
связал бы 'DD' имя 'JCLDDNAM' с файлом с именем 'HLQ.MY.FILE'.Эта часть зависит от платформы, поэтому детали специфичны для операционной среды.
В разделе "УПРАВЛЕНИЕ ФАЙЛАМИ" вашей программы COBOL вы соединяете "ИМЯ DD", определенное в вашем JCL, с именем, которое вы будете использовать в каждой инструкции ввода-вывода для ссылки на этот файл.Это соединение определяется с помощью инструкции 'SELECT'.
Например,SELECT MYFILE ASSIGN JCLDDNAM remainder of select
устанавливает связь между любым файлом, который вы связали с 'JCLDDNAM' в вашем 'JCL', и 'MYFILE', на который вы позже будете ссылаться в операторах ввода-вывода COBOL.Тот Самый
SELECT
сам оператор является частью стандарта ISO COBOL.Однако многие реализации COBOL определяют некоторые нестандартные расширения для облегчения различных настроек своих файловых подсистем.Открывайте, считывайте, записывайте, закрывайте файлы в "РАЗДЕЛЕ ПРОЦЕДУР" вашей программы, используя имя "MYFILE", как в:
OPEN MYFILE READ MYFILE CLOSE MYFILE
Вышесказанное сильно упрощено, и существует множество способов сделать это в COBOL.Понимание полной картины потребует определенных реальных усилий, времени и практики.Инструкции ввода-вывода, проиллюстрированные выше, являются частью стандарта COBOL, но у каждого поставщика будут свои расширения.
IBM COBOL поддерживает широкий спектр файловых организаций и методов доступа.Вы можете ознакомиться со справочным руководством по языку IBM Enterprise COBOL здесь однако, чтобы получить синтаксис и правила для манипулирования файлами, необходимо Руководство пользователя предоставляет множество хороших примеров для чтения / записи файлов (вам придется немного покопаться - но все это изложено для вас).
Настройка для обращения к базе данных SQL через программу COBOL несколько отличается, но включает в себя настройку соединения между вашей программой и подсистемой базы данных.В мире IBM это делается с помощью JCL, в других средах будут использоваться другие механизмы.
IBM COBOL использует предварительный процессор или сопроцессор для интеграции доступа к базе данных и обмена данными.Например, следующий код будет извлекать некоторые данные из базы данных DB2:
MOVE 1234 TO PERSON-ID
EXEC SQL
SELECT FIRST_NAME, LAST_NAME
INTO :FIRST-NAME, :LAST-NAME
FROM PERSON
WHERE PERSON_ID = :PERSON-ID
END-EXEC
DISPLAY PERSON-ID FIRST-NAME LAST-NAME
То, что находится между EXEC SQL
и END-EXEC
это довольно простая инструкция SQL select.Имена, которым предшествуют двоеточия, являются переменными узла COBOL, используемыми для передачи данных в DB2 или получения их обратно.Если вы когда-либо раньше кодировали процедуры доступа к базе данных, это должно показаться вам очень знакомым.Это Ссылка содержит простое введение во внедрение инструкций SQL в программу IBM Enterpirse COBOL.
Кстати, IBM Enterprise COBOL тоже способен работать с XML-документами.Извините за сильный уклон IBM, но это среда, с которой я знаком больше всего.
Надеюсь, это поможет вам начать работу в правильном направлении.
Другие советы
Кто сказал, что вы не можете использовать SQL для извлечения данных из приложения cobol, возможно, не тратя денег?
Компания, в которой я раньше работал, сделала именно это - с помощью SQLite.Эта маленькая жемчужина общедоступной библиотеки компилирует SQL-инструкции в байт-код, а затем выполняет их.
Заменив "серверный" уровень SQLite пользовательским интерфейсом к библиотеке C, которая имеет дело с файлами Cobol, стало возможным запрашивать данные Cobol с других языков, в данном случае Python.Это работало - в пределах SQLite, конечно, но было стабильным, казалось достаточно реляционным и даже не требовало сервера БД :-)
Традиционные пакетные среды COBOL используют "раздел данных" программы cobol для непосредственного объявления подключений к базе данных, которые, в свою очередь, настраиваются в JCL.Поскольку COBOL предшествовал SQL, это, как правило, были различные другие типы баз данных, но вполне вероятно, что IBM заставила SQL работать с DB / 2.Я полагаю, вы получите другой ответ от кого-то, кто ближе к этому материалу.Если вы посмотрите на препроцессоры SQL, доступные для использования с другими языками, вы поймете идею - курсор становится собственным типом данных и передает результаты запроса в собственные переменные.
Мэйнфрейм Cobol использует встроенный SQL (вроде как SQLj), например:
Процедурный отдел.
Exec SQL
Select col1, col2
from myTable
into :ws-col1, :ws-col2
where col0 = :col0
End-Exec
В этом случае переменные хоста ws-col0, ws-col1 и ws-col2 определены в разделе "рабочее хранилище".Интерфейс базы данных управляет получением этих данных в нужном месте.
На самом деле это очень просто по сравнению с распространяемыми материалами.
Все магазины мэйнфреймов IBM, в которых я работал, использовали COBOL, который взаимодействовал с реляционной базой данных.Как правило, это был DB2 от IBM.Пожалуйста, обратите внимание, что DB2 - это реляционная база данных, которая работает на мэйнфреймах.Он также может быть запущен в Windows или Linux.
Двадцать лет назад основным способом ввода данных в базу данных мэйнфрейма DB2 было использование CICS.CICS - это программное обеспечение "уровня презентации", которое взаимодействует с экранами ввода данных на основе символов.Рассматривайте CICS как функциональный эквивалент PHP или ASP.NET.
Сегодня существует гораздо больше вариантов получения данных в DB2.CICS по-прежнему является опцией, но вашим "уровнем представления" может быть PHP, ASP.NET, Win Forms, Java JSF, Powerbuilder.Ключевым моментом является то, что ваша платформа разработки должна быть способна работать с драйвером базы данных DB2.Платформой может быть Windows, Linux и, возможно, другие.
Я хочу сказать, что данные могут попадать в базу данных мэйнфрейма DB2 разными способами со многих платформ.Язык COBOL может быть задействован при вводе данных, составлении отчетов, изменении данных COBOL и т.д.Но это может быть только часть многоуровневого приложения, которое может быть частью Windows, Web и мэйнфрейма .Я мог бы привести конкретные примеры, если у вас есть больше информации о приложении, с которым вы будете работать на стажировке.