Программа DB2 на языке COBOL - PullRequest
       57

Программа DB2 на языке COBOL

3 голосов
/ 10 августа 2010

Если у меня есть 1 программа DB2 на COBOL, которая вызывает 2 другие подпрограммы DB2 на COBOL, то сколько будет создано DBRM, пакетов, планов?Если я изменяю какую-либо из подпрограмм, нужно ли мне перекомпилировать и связывать все программы? Я действительно запутался с DBRM, планами и пакетами.

С уважением, Манаси

1 Ответ

6 голосов
/ 10 августа 2010

О боже ... Это огромная тема, так что это ответ будет очень упрощенным и, следовательно, неполным.

Ответ зависит в некоторой степени от того, используете ли вы прекомпилятор DB / 2 или компилятор. За это Ответ Я предполагаю, что вы используете прекомпилятор. Если вы используете компилятор принцип почти такой же, но механика немного другая.

Целью здесь является создание:

  • a Загрузить модуль из источника COBOL
  • DB / 2 Планируйте предоставить вашей программе пути доступа к базе данных DB / 2

Все, что находится между ними, просто поддерживает механизм создания соответствующего плана DB / 2. для вашей программы для запуска.

Механика

Каждая программа и / или подпрограмма, содержащая операторы DB / 2, нуждается в быть предварительно обработанным прекомпилятором DB / 2. Прекомпилятор создает DBRM (модуль запроса базы данных). Прекомпиляция также изменяет вашу исходную программу, комментируя все операторы EXEC SQL...END-EXEC и заменяет их конкретными вызовами подсистемы DB / 2. Затем вы используете обычный компилятор COBOL для компиляции кода, испускаемого препроцессором, для создания объектного модуля, который затем связываете в исполняемый файл.

DBRM, созданный прекомпиляцией, содержит список операторов SQL, содержащихся в вашей программе плюс некоторая другая информация, которую DB / 2 использует для свяжите эти конкретные операторы SQL с вашей программой. DBRM обычно пишется в постоянный набор данных (обычно PDS), а затем ввод в DB / 2 Binder, где конкретный доступ пути для каждого оператора SQL в вашей программе компилируются в форму DB / 2 может реально использовать. Связыватель выполняет для DB / 2 примерно ту же функцию, что и компилятор для COBOL. Думайте о DBRM как о вашем исходном коде, а Binder - как о компиляторе.

Информация о пути доступа, создаваемая, когда DBRM связан нужно где-то хранить, чтобы его можно было найти и использовать когда ваша программа вызывает DB / 2.

Куда положить вывод связующего? Вы можете привязать его к Пакету или непосредственно к Плану.

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

Большинство более крупных систем не будут связывать DBRM напрямую в планы, они будут связываться в пакет. Связанный Пакет хранится в подсистеме DB / 2 (так же, как и план). Что же такое пакет? Пакет является связанным одинарным DBRM. План, с другой стороны, обычно содержит пути доступа к нескольким DBRM.

Теперь у нас есть набор пакетов, каждый пакет содержит пути доступа SQL к соответствующей DBRM, которые был получен из данного программа. Нам нужно составить план из них. Для этого нужен набор Bind Cards создается, как правило, вашим администратором базы данных. Карты привязок являются всего лишь своего рода «исходным кодом» к Биндеру DB / 2 (они не являются перфокартами). Карты привязок определяют, какие пакеты формируют данный план. Затем они передаются в Связыватель, который собирает их в План. Замечания: Вы также можете услышать упоминание о коллекциях, это просто названные группы пакетов, которые имеют был определен вашим администратором базы данных.

Подводя итог, мы имеем следующий процесс:

     Program -> (Pre-Compiler) -> Modified Program -> (COBOL compiler) -> Object -> (Link) -> Load Module 
                               -> DBRM -> (DB/2 Bind) -> Package

     Bind Cards -> (DB/2 Bind) -> DB/2 Plan
     Package(s) ->

Два основных вывода здесь - это модуль загрузки (ваша исполняемая программа на языке COBOL) и план DB / 2. Программа и Plan собираются вместе в вашем JCL, где вы должны указать имя плана где-то в заявлении EXEC вместе с программой для запуска.

С этим кратким и очень упрощенным фоном, давайте попробуем ответить на ваши вопросы:

Как могут создаваться DBRM?

Один DBRM на программу, содержащую SQL EXEC операторов

Сколько пакетов создано?

Пакет составлен из одного DBRM. Существует соответствие 1: 1 между исходной программой и пакетом

Сколько планов создано?

Любой данный Пакет может быть включен в несколько Коллекций и / или множество наборов Bind Card. это означает, что данный Пакет может быть включен в несколько Планов.

Если я изменю программу, что затронуто?

Если вы связываете свою DBRM непосредственно с Планом, вы должны перепривязать каждый План, который использует что DBRM. Это может быть очень трудоемким и подверженным ошибкам предложением.

Однако, если вы связываете свою DBRM в пакет, вам нужно только перепривязать этот пакет. Поскольку существует соответствие 1: 1 между Программой и Пакетом, только одно связывание должно быть сделано. Единственный раз, когда План должен быть восстановлен, это когда Пакет или Коллекция добавляется или удаляется из набора Bind Card, который его определяет.

Преимущество использования пакетов должно быть ясно из вышесказанного, и именно поэтому большинство магазины не связывают DBRM напрямую в планы, а используют пакеты.

...