COBOL - это еще один компьютерный язык третьего поколения. Он просто немного старше большинства, что не означает, что он в чем-то неполный (на самом деле в нем довольно много багажа, но это уже другая история).
Как и любой другой язык третьего поколения, COBOL управляет файлами данных почти так же, как и в программе на языке C. Ничего странного, загадочного или волшебного в этом нет. Файлы открываются, читаются, записываются и закрываются с использованием функций файлового ввода-вывода языка.
Для установления связи между реальным файлом и программой используются различные механизмы. Подробности здесь часто относятся к той операционной системе, в которой вы работаете. Как правило, реализации COBOL пытаются изолировать себя от операционной среды с помощью логического имени файла, а не фактического имени. Это добавленное косвенное обращение важно, когда вы пишете программы, которые будут портированы на разные платформы (например, писать и тестировать в среде IDE на платформе Windows, а затем запускать на мэйнфрейме).
Следующие примеры относятся к среде мэйнфрейма IBM.
В мире мэйнфреймов IBM вы обнаружите, что программы выполняются либо в пакетном режиме, либо в интерактивном режиме (например, CICS). Я не буду описывать, как настроить файловый ввод-вывод под CICS (это долгая история). Программы, которые используются для работы с файлами, обычно являются пакетными. Вот приблизительная иллюстрация того, как работает пакетная программа:
Пакетные программы запускаются через JCL. JCL используется для идентификации программы для запуска (оператор EXEC) и для определения файлов, которые ваша программа будет ссылаться с помощью операторов DD.Функция оператора DD состоит в том, чтобы сформировать логическую связь между фактическим файлом и именем, на которое ваша программа COBOL будет ссылаться, когда захочет обратиться к файлу (это механизм изоляции, упомянутый ранее). Например,
JCLDDNAM DD DSN = 'HLQ.MY.FILE' ...
свяжет 'DD' имя 'JCLDDNAM' с файлом с именем 'HLQ.MY.FILE'. Эта часть зависит от платформы, поэтому детали зависят от операционной среды.
В разделе «FILE-CONTROL» вашей программы на COBOL вы связываете «DD NAME», определенное в вашем JCL, с именем, которое вы будете использовать в каждом операторе ввода-вывода для ссылки на этот файл. Это соединение определяется с помощью оператора SELECT.
Например,
SELECT MYFILE
ASSIGN JCLDDNAM
остаток от select
устанавливает соединение между любым файлом, который вы связали с 'JCLDDNAM 'в вашем' JCL 'в' MYFILE ', на который вы позже будете ссылаться в операторах ввода-вывода COBOL. Сам оператор SELECT
является частью стандарта ISO COBOL. Однако многие реализации COBOL определяют некоторые нестандартные расширения для облегчения различных причуд своих файловых подсистем.
Открывать, читать, писать и закрывать файлы в разделе «PROCEDURE DIVISION» вашей программы, используя имя «MYFILE», например:
OPEN MYFILE
READ MYFILE
CLOSE MYFILE {{ 1}}
Вышесказанное сильно упрощено, и в 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. Имена, которым предшествуют двоеточия, представляют собой переменные хоста COBOL, используемые для передачи данных в DB2 или получения их обратно. Если вы когда-либо кодировали процедуры доступа к базе данных, это должно быть вам хорошо знакомо. Эта ссылка дает простое введение в включение операторов SQL в программу IBM Enterpirse COBOL.
Между прочим, IBM Enterprise COBOL также может работать с XML-документами. Извините за сильный уклон IBM, но это среда, с которой я больше всего знаком.
Надеюсь, это поможет вам начать в правильном направлении.
Традиционные пакетные среды COBOL используют «раздел данных» программы cobol для прямого объявления соединений с базой данных, которые, в свою очередь, устанавливаются в JCL. Поскольку COBOL предшествовал SQL, это, как правило, были различные другие типы баз данных, но вполне вероятно, что IBM заставила SQL работать с DB / 2. Я полагаю, вы получите еще один ответ от кого-то, кто ближе к этому вопросу. Если вы посмотрите на препроцессоры SQL, доступные для использования с другими языками, вы поймете идею - курсор становится собственным типом данных и доставляет результаты запроса в собственные переменные.
Все магазины мэйнфреймов IBM, в которых я работал, использовали COBOL, который взаимодействовал с реляционной базой данных. Обычно это была IBM DB2. Обратите внимание, что 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, Интернета и мэйнфрейма. Я мог бы привести конкретные примеры, если у вас есть дополнительная информация о приложении, с которым вы будете работать во время стажировки.
Кто сказал, что нельзя использовать SQL для извлечения данных из приложения cobol, может быть, не тратя денег?
Компания, в которой я работал, сделала именно это - с SQLite. Эта маленькая жемчужина публичной библиотеки компилирует операторы SQL в байт-код, а затем выполняет их.
Заменив "backend" уровень SQLite настраиваемым интерфейсом к библиотеке C, которая имеет дело с файлами Cobol, стало возможным запрашивать данные Cobol с других языков, в данном случае с Python. Это работало - в рамках SQLite, конечно, но было стабильно, казалось достаточно реляционным и даже не требовало сервера БД: -)
Mainframe Cobol использует встроенный SQL (вроде SQLj), например:
Процедура Division.
Exec SQL
Select col1, col2
from myTable
into :ws-col1, :ws-col2
where col0 = :col0
End-Exec
В этом случае переменные хоста ws-col0, ws-col1 и ws-col2 определены в разделе working-storage. Интерфейс базы данных управляет получением этих данных в нужном месте.
Очень просто по сравнению с распределенным материалом.