как получить количество строк из активности Tibco Direct SQL или JDBC Query

В моем процессе Tibco у меня есть логика, которая сопоставляет выходные данные SQL-запроса, только если запрос возвращает менее 1000 записей из активности Tibco «Direct SQL» или Tibco «JDBC Query».

На данный момент я просто запускаю один и тот же запрос 2 раза:

Select count(*) AS Count 
FROM my_table  
WHERE my_table.foo = 'bar'

если результат первого запроса меньше 1000, я вызываю тот же запрос для получения всех строк

Select my_table.* 
FROM my_table  
WHERE my_table.foo = 'bar'

Запрос довольно тяжелый, и я хочу запустить его только один раз для повышения производительности.

Я нашел решение со стороны SQL в Нужен подсчет строк после оператора SELECT: каков оптимальный подход к SQL?

Я могу использовать запрос типа:

SELECT my_table.*, count(*) OVER() AS Count
  FROM my_table
 WHERE my_table.foo = 'bar'

Проблема в том, что добавление count(*) к запросу также влияет на производительность.

Я могу сопоставить результат запроса с действием «Сопоставление данных», а затем использовать count($Map-Data/pfx:my_element/), но я предпочитаю избегать дополнительного ненужного сопоставления для повышения производительности.

Tibco "Direct SQL" и Tibco "JDBC Query" используют драйверы Oracle (ojdbc7.jar) и DB2 (jt400.jar).

Есть ли способ получить количество строк вывода запроса со стороны tibco, не добавляя количество к выводу запроса?


person David Abragimov    schedule 17.04.2018    source источник
comment
Как насчет использования fetch first 1000 rows only?   -  person a_horse_with_no_name    schedule 18.04.2018
comment
1000 это просто пример. Его можно изменить на стороне Tibco. Также мне нужно количество записей запросов в выводе процесса.   -  person David Abragimov    schedule 18.04.2018
comment
Я могу сопоставить результат с действием Map Data, а затем использовать count($Map-Data/pfx:my_element/), но я предпочитаю избегать дополнительного ненужного сопоставления для повышения производительности.   -  person David Abragimov    schedule 18.04.2018
comment
Итак, в идеале я не хочу выполнять какие-либо сопоставления или другие дополнительные действия на стороне tibco, если количество строк запроса больше N, но мне нужно знать количество строк запроса в выходных данных процесса. Простое ограничение вывода запроса не поможет.   -  person David Abragimov    schedule 18.04.2018


Ответы (1)


Наконец-то я получил то, что мне нужно. Я могу просто использовать функцию «счет» XPATH непосредственно из вывода действий «SQL Direct» или «JDBC Query».

«Запрос JDBC»: count($JDBC-Query/resultSet/Record) ‹ 1000

"SQL Direct": count($SQL-Direct/jdbcGeneralActivityOutput/unknownResultset/row) ‹1000

Количество строк запроса JDBC

person David Abragimov    schedule 18.04.2018