powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Reference на результат SELECT в ESQL
14 сообщений из 14, страница 1 из 1
Reference на результат SELECT в ESQL
    #34575969
Alexander_UA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Существует ли возможность определить и использовать subj в ESQL (в частности в Message Broker Toolkit). В примерах встречается, например
SET OutputRoot.XML.Test.Result[] = (SELECT T.Column1, T.Column2 FROM Database.USERTABLE AS T);
или
IF EXISTS(SELECT T.MYCOL FROM Database.MYTABLE) THEN ...
или
SET OutputRoot.XML.Testcase.Results[] = ( SELECT T.MYCOL FROM Database.MYTABLE);
IF CARDINALITY (OutputRoot.XML.Testcase.Results[]) > 0 THEN ...
но если мне не нужно помещять результаты SELECT в OutputRoot, а нужно только их проанализировать и внести нужные изменения в маршрутизацию/содержимое потока, то как этого достичь?
Можно ли использовать что-то вроде
DECLARE Cur Cursor;
SET Cur = (SELECT T.MYCOL FROM Database.MYTABLE);
IF EXISTS(Cur.MyCol) THEN ...
...
Рейтинг: 0 / 0
Reference на результат SELECT в ESQL
    #34576029
Читать документацию и примеры.

Можно сделать например так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
DECLARE ADRLIST ROW; 
DECLARE NAME CHARACTER '';
DECLARE AGE INTEGER  0 ;

SET ADRLIST.DATA[] = SELECT NAME, AGE FROM MYTABLE WHERE ....
IF CARDINALITY(ADRLIST.DATA[]) >  0  THEN BEGIN
SET NAME = ADRLIST.DATA[ 1 ].NAME;
SET AGE = ADRLIST.DATA[ 1 ].AGE;
END;

Соответственно вместо SET можно использовать другие операторы.

Вот не помню, SELECT INTO работает или нет. Надо будет завтра проверить.
...
Рейтинг: 0 / 0
Reference на результат SELECT в ESQL
    #34576062
Alexander_UA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЗдОрово! Спасибо.
Нашёл в примерах также
SET Environment.Variables.Reservation[] = (SELECT ...);
DECLARE I INTEGER 1;
DECLARE J INTEGER CARDINALITY(Environment.Variables.*[]);
WHILE I <= J DO
...
//доступ к полям по синтаксису
Environment.Variables.Reservation .CLASSTYPE;
SET I = I + 1;
END WHILE;
А не посоветуете тогда какую документацию и примеры лучше посмотреть?
Уже закопался в мегабайтных pdf файлах Message Broker Toolkit related, но нигде описания этих моментов не встречал.
...
Рейтинг: 0 / 0
Reference на результат SELECT в ESQL
    #34576791
Штатная документация.

Доступна как Information Center (кстати встроена в Message Broker Toolkit (Help)), так и как PDF-файлы.
Смотреть здесь:
http://www-306.ibm.com/software/integration/wbimessagebroker/library/

Там ссылки и на Information Center и на PDF-документацию.
Очень полезны книжки Message Flows и ESQL.
Аналогичные главы есть и в Information Center, с примерами или ссылками на примеры.
Для поиска Information Center удобнее.
...
Рейтинг: 0 / 0
Reference на результат SELECT в ESQL
    #34577538
Alexander_UA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо за ссылку. Не знал. У меня некоторые PDF устаревшие в любом случае оказались а по ESQL аообще не было.
Можно я еще вопрос тут задам? Не получается собственно соединение с БД восстановить.
В ESQL скрипте видны Warnings типа
Unresolvable database table reference "Database.tblEmployee".
Перед этим
1) Создал ODBC источник данных N (в нём connect проходит нормально)
2) Использовал mqsisetdbparams для определения имени/пароля пользователя используемых для соединения брокера с БД.
3) У ComputeNode выставил N в качестве DataSource и в ESQL пишу типа
DECLARE R ROW;
SET R = (SELECT T.LoginName FROM Database.tblEmployee AS T WHERE T.EmployeeID=0);
и после сохранения ESQL вижу вышеописанный Warning.

Есть видимо какой-то тонкий момент, но я его пока не отлавливаю. Пытался создать Database Definition/Schema Definition, но Warning не уходит и flow не работает.
Не подскажете чего я упустил?
На всякий случай: OS - локальный WinXP, DB - MSSQL 2000 на удаленном WinXP (connect by IP), Message Broker Toolkit v6.0.2.
...
Рейтинг: 0 / 0
Reference на результат SELECT в ESQL
    #34577843
Alexander_UA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, варианты
SET R = THE (SELECT T.LOGINNAME FROM Database.TBLEMPLOYEE AS T WHERE T.EMPLOYEEID=0);
SET R = THE (SELECT T.LOGINNAME FROM Database.N.TBLEMPLOYEE AS T WHERE T.EMPLOYEEID=0);
т.е. с THE и без, UpperCase или нет, всё равно дают те же результаты.
...
Рейтинг: 0 / 0
Reference на результат SELECT в ESQL
    #34577894
Источник данных создал системный (System DSN)?

Я еще обычно указываю имя схемы, может это и не обязательно, не помню.
Т.е. например вот так:
Код: plaintext
1.
2.
DECLARE Table_Schema  CONSTANT CHAR 'USER01';
DECLARE Table_Name     CONSTANT CHAR 'TDATA'; 
SELECT A.NAME,  A.AGE FROM Database.{Table_Schema}.{Table_Name} AS A ;

Чтобы исчезли предупреждения при разработке, нужно в проекте подключиться к этой базе и выполнить импорт используемых схем и таблиц в проект. Тогда и предупреждения исчезнут, и подсказки(Ctrl+Space) будут работать.

А работать должно и с предупреждениями, если все правильно настроено. Выполнять Flow пробовал? Работает или дает ошибку?
...
Рейтинг: 0 / 0
Reference на результат SELECT в ESQL
    #34578311
Alexander_UA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чтоб я так разбирался...
После добавления Database/Schema/Table Definitions (где всё, включая нужные поля, пришлось определять вручную) исчез Warning. Но Flow все равно не работает. Строка ESQL
SET OutputRoot.XML.Data.LoginName = R.Data[1].LoginName;
в отличии от
SET OutputRoot.XML.Data.LoginName = 'LoginName';
приводит к тому, что в исходящем LoginName отсутствует.
А как в проекте подключиться к базе и выполнить импорт используемых схем и таблиц в проект? Не нашел такого.
...
Рейтинг: 0 / 0
Reference на результат SELECT в ESQL
    #34578398
Alexander_UA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А без определения Database/Schema/Table Definitions поток вообще не работает.
Подозреваю, что вываливается на этом SELECT.
...
Рейтинг: 0 / 0
Reference на результат SELECT в ESQL
    #34578550
Alexander_UA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вау, заработала связка
SET Environment.Variables = THE (SELECT T.LoginName FROM Database.tblEmployee AS T WHERE T.EmployeeID=0);
SET OutputRoot.XML.Data.LoginName3 = Environment.Variables.LoginName;
но предложенный ранее
SET R.DATA[] = (SELECT T.LoginName FROM Database.tblEmployee AS T WHERE T.EmployeeID=0);
SET OutputRoot.XML.Data.LoginName2 = R.Data[1].LoginName;
не работает, т.е. видимо OutputRoot.XML.Data.LoginName2 = Null.
Может где-то есть ошибка во всех этих скобках?
...
Рейтинг: 0 / 0
Reference на результат SELECT в ESQL
    #34578641
Alexander_UA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос снимается. Если всё вводить case sensitive то работает
SET R.DATA[] = SELECT T.LoginName FROM Database.tblEmployee AS T WHERE T.EmployeeID=0;
SET OutputRoot.XML.Data.LoginName2 = R.DATA[1].LoginName;
...
Рейтинг: 0 / 0
Reference на результат SELECT в ESQL
    #34578693
Alexander_UA
SET R.DATA[] = (SELECT T.LoginName FROM Database.tblEmployee AS T WHERE T.EmployeeID=0);
SET OutputRoot.XML.Data.LoginName2 = R.Data[1].LoginName;
не работает, т.е. видимо OutputRoot.XML.Data.LoginName2 = Null.
Может где-то есть ошибка во всех этих скобках?

Скобки в этом случае не нужны.
Если тебе нужна только первая запись, то конструкция с THE правильнее.
Если Flow вывалился по ошибке, то сообщение об ошибке ищи в Event Log-е Windows XP

По поводу соединения с БД
На проекте правой мышой, пункт Data Definition Files, там задашь соединение, потом подключайся и действуй (копируй в проект схемы и таблицы).
Еще соединения можно увидеть если переключиться в перспективу "Data"
...
Рейтинг: 0 / 0
Reference на результат SELECT в ESQL
    #34579097
Alexander_UA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ага, только у меня БД = MSSQL, а JDBC Driver для доступа к ней отсутствует.
...
Рейтинг: 0 / 0
Reference на результат SELECT в ESQL
    #34580112
Драйверов JDBC для MS SQL несколько штук. Родной от MS вроде есть. И я как-то пользовался драйвером jTDS. Поищи. В крайнем случае можно воспользоваться JDBC-ODBC Дравером из комплекта JDK. Хотя забавно конечно, что Tookit работает через JDBC, а брокер через ODBC. Но так уж написано.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Reference на результат SELECT в ESQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]