Чтение 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) - для упрощения.

Для того, чтобы распечатать

Для того, чтобы распечатать значения из таблицы, их нужно прочитать в переменные. Так что поменять надо сам запрос:
ExecStm = "SELECT FIELD INTO :VARIABLE FROM MYOWNER.MYTABLE"

После выполнения запроса значение поля field будет находится в переменной variable. Так что после этого можно и печатать:

Say VARIABLE

если писать exec в 3.4 то мне

если писать exec в 3.4 то мне просто в ответ пишется variable,
а если делать через jcl, то 12 ошибка
//user1967 job acct#,user19,notify=user19,msglevel=(1,1)
//step01 exec pgm=ikjeft01,parm='dbread1 dbbg'
//sysexec dd dsn=user19.exec,disp=shr
//systsprt dd sysout=*
//systsin dd dummy
вот мой jcl

Проблема решена! Путем

Проблема решена!
Путем припиливания курсора

подскажите, не совсем ясно,

подскажите, не совсем ясно, как вывести значения на экран?
я так понял, что чтото нужно добавить после ADDRESS DSNREXX "EXECSQL",...

Отправить комментарий

  • Доступны HTML теги: <b> <i> <u> <br> <hr> <div> <span> <code> <pre>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <pli>.

Подробнее о форматировании

  ____    _____ 
| ___| |___ /
|___ \ |_ \
___) | ___) |
|____/ |____/
Enter the code depicted in ASCII art style.