Чтение DB2 таблиц из REXX

Сегодня я хочу рассказать Вам о том, как можно организовать работу с DB2, используя язык REXX.

Для выполнения SQL команд нужно использовать функцию DSNREXX. Пример использования:

/**********************************************************************/
/* Connect to DB2 system                                              */
/**********************************************************************/
ConnectDB2:
  ADDRESS DSNREXX 
  "CONNECT" db2sys
RETURN

Команда DSNREXX должна быть доступна для работы - это можно обеспечить так:

"SUBCOM DSNREXX"
IF RC THEN
   S_RC = RXSUBCOM('ADD','DSNREXX','DSNREXX')

Общая логика REXX программы, обращающейся к DB2, следующая:
1. Подключаемся к DB2 подсистеме
2. Выполняем DB2 команды
3. Отключаемся от DB2 подсистеме

Банально, не правда ли? =)

Итак, сам текст REXX программы, которой в качестве аргумента передается имя DB2 подсистемы:

/* REXX */
trace 'o'
Parse Upper Arg db2sys
 
CALL ConnectDB2
CALL Exec_Statement
CALL DisconnectDB2
 
/**********************************************************************/
/* Connect to DB2 system                                              */
/**********************************************************************/
ConnectDB2:
    "SUBCOM DSNREXX"                   /* Host cmd env available?     */
 
    IF RC THEN                         /* No--make one                */
       S_RC = RXSUBCOM('ADD','DSNREXX','DSNREXX')
 
    ADDRESS DSNREXX
 
    "CONNECT" db2sys
RETURN
/**********************************************************************/
/* Execute DB2 SQL statement                                          */
/**********************************************************************/
Exec_Statement:
   ExecStm = "SELECT * FROM MYOWNER.MYTABLE"
 
   ADDRESS DSNREXX "EXECSQL" ,
                    ExecStm
RETURN
/**********************************************************************/
/* Disconnect from DB2 system                                         */
/**********************************************************************/
DisconnectDB2:
    ADDRESS DSNREXX "DISCONNECT"
                                       /* Delete the host command     */
                                       /* environment for             */
    S_RC = RXSUBCOM('DELETE','DSNREXX','DSNREXX')
RETURN

Обратите вниманию, что в программе отсутствует проверка SQL кода (находится в переменной SQLCODE) - для упрощения.