Как КОБОЛ хранит и получает данные? [закрытый]

8
задан John Saunders 18 March 2010 в 17:23
поделиться

5 ответов

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

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

Для установления связи между реальным файлом и программой используются различные механизмы. Подробности здесь часто относятся к той операционной системе, в которой вы работаете. Как правило, реализации 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. В разделе «FILE-CONTROL» вашей программы на COBOL вы связываете «DD NAME», определенное в вашем JCL, с именем, которое вы будете использовать в каждом операторе ввода-вывода для ссылки на этот файл. Это соединение определяется с помощью оператора SELECT.
    Например,

     SELECT MYFILE 
    ASSIGN JCLDDNAM 
    остаток от select 
     

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

  3. Открывать, читать, писать и закрывать файлы в разделе «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, но это среда, с которой я больше всего знаком.

Надеюсь, это поможет вам начать в правильном направлении.

20
ответ дан 5 December 2019 в 06:37
поделиться

Традиционные пакетные среды COBOL используют «раздел данных» программы cobol для прямого объявления соединений с базой данных, которые, в свою очередь, устанавливаются в JCL. Поскольку COBOL предшествовал SQL, это, как правило, были различные другие типы баз данных, но вполне вероятно, что IBM заставила SQL работать с DB / 2. Я полагаю, вы получите еще один ответ от кого-то, кто ближе к этому вопросу. Если вы посмотрите на препроцессоры SQL, доступные для использования с другими языками, вы поймете идею - курсор становится собственным типом данных и доставляет результаты запроса в собственные переменные.

1
ответ дан 5 December 2019 в 06:37
поделиться

Все магазины мэйнфреймов 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, Интернета и мэйнфрейма. Я мог бы привести конкретные примеры, если у вас есть дополнительная информация о приложении, с которым вы будете работать во время стажировки.

0
ответ дан 5 December 2019 в 06:37
поделиться

Кто сказал, что нельзя использовать SQL для извлечения данных из приложения cobol, может быть, не тратя денег?

Компания, в которой я работал, сделала именно это - с SQLite. Эта маленькая жемчужина публичной библиотеки компилирует операторы SQL в байт-код, а затем выполняет их.

Заменив "backend" уровень SQLite настраиваемым интерфейсом к библиотеке C, которая имеет дело с файлами Cobol, стало возможным запрашивать данные Cobol с других языков, в данном случае с Python. Это работало - в рамках SQLite, конечно, но было стабильно, казалось достаточно реляционным и даже не требовало сервера БД: -)

3
ответ дан 5 December 2019 в 06:37
поделиться

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. Интерфейс базы данных управляет получением этих данных в нужном месте.

Очень просто по сравнению с распределенным материалом.

1
ответ дан 5 December 2019 в 06:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: