Как COBOL хранит и извлекает данные?[закрыто]

StackOverflow https://stackoverflow.com/questions/2440487

  •  19-09-2019
  •  | 
  •  

Вопрос

Я начинаю узнавать о COBOL.У меня есть некоторый опыт написания программ, которые имеют дело с базами данных SQL, и я предполагаю, что меня смущает, как COBOL хранит и извлекает данные, которые хранятся, например, в мэйнфрейме.Я знаю, что это не похоже на реляционные базы данных, но каждый пример программы, который я видел, берет данные прямо из командной строки, и я знаю, что реальные программы COBOL обрабатывают данные не так.Может ли кто-нибудь объяснить или показать мне хороший ресурс, который может это объяснить?

Это было полезно?

Решение

COBOL - это всего лишь еще один компьютерный язык третьего поколения.Он просто немного старше большинства, что не означает, что он какой-то неполный (на самом деле к нему прилагается довольно большой багаж - но это уже другая история).

Как и в случае с любым другим языком третьего поколения, COBOL манипулирует файлами данных практически так же, как вы бы это делали в программе на языке Си.В этом нет ничего странного, таинственного или волшебного.Файлы открываются, считываются, записываются и закрываются с использованием функций файлового ввода-вывода данного языка.

Для формирования связи между реальным файлом и программой используются различные механизмы.Приведенные здесь сведения часто относятся к операционной системе, под управлением которой вы работаете.Как правило, реализации COBOL пытаются изолировать себя от операционной среды с помощью логического имени файла, а не фактического имени.Эта дополнительная косвенность важна при написании программ, которые будут портированы на разные платформы (напримернапишите и протестируйте в среде IDE на платформе Windows, а затем запустите на мэйнфрейме).

Следующие примеры относятся к среде мэйнфреймов IBM.

В мире мэйнфреймов IBM вы обнаружите, что программы выполняются либо в пакетном режиме, либо в режиме онлайн (напримерCICS).Я не буду описывать, как настроить файловый ввод-вывод в CICS (это долгая история).Программы, которые используются для манипулирования файлами, обычно являются пакетными.Вот грубая иллюстрация того, как работает пакетное программное обеспечение:

  1. Пакетные программы запускаются через JCL.JCL используется для определения программы для запуска (инструкция 'EXEC') и для определения, на какие файлы будет ссылаться ваша программа, используя инструкции 'DD'.Функция оператора DD заключается в формировании логической связи между реальным файлом и именем, на которое будет ссылаться ваша программа COBOL, когда она захочет обратиться к файлу (это механизм изоляции, упомянутый ранее).Например,

    JCLDDNAM DD DSN='HLQ.MY.FILE'...
    

    связал бы 'DD' имя 'JCLDDNAM' с файлом с именем 'HLQ.MY.FILE'.Эта часть зависит от платформы, поэтому детали специфичны для операционной среды.

  2. В разделе "УПРАВЛЕНИЕ ФАЙЛАМИ" вашей программы COBOL вы соединяете "ИМЯ DD", определенное в вашем JCL, с именем, которое вы будете использовать в каждой инструкции ввода-вывода для ссылки на этот файл.Это соединение определяется с помощью инструкции 'SELECT'.
    Например,

    SELECT MYFILE
    ASSIGN JCLDDNAM
    remainder of select
    

    устанавливает связь между любым файлом, который вы связали с 'JCLDDNAM' в вашем 'JCL', и 'MYFILE', на который вы позже будете ссылаться в операторах ввода-вывода COBOL.Тот Самый SELECT сам оператор является частью стандарта ISO COBOL.Однако многие реализации COBOL определяют некоторые нестандартные расширения для облегчения различных настроек своих файловых подсистем.

  3. Открывайте, считывайте, записывайте, закрывайте файлы в "РАЗДЕЛЕ ПРОЦЕДУР" вашей программы, используя имя "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 и мэйнфрейма .Я мог бы привести конкретные примеры, если у вас есть больше информации о приложении, с которым вы будете работать на стажировке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top