如何从 Tibco Direct SQL 或 JDBC 查询 activity 获取行数

how to get row count from Tibco Direct SQL or JDBC Query activity

在我的 Tibco 进程中,我有逻辑映射 SQL 仅当查询 returns 来自 Tibco "Direct SQL" 或 Tibco "JDBC Query" [=] 的记录少于 1000 条时才查询输出46=]。

现在我只是 运行 两次相同的查询:

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

如果第一个查询结果小于 1000,我将调用相同的查询来获取所有行

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

查询非常繁重,出于性能目的,我只想 运行 查询一次。

我在 Need a row count after SELECT statement: what's the optimal SQL approach?

中找到了 SQL 方面的解决方案

我可以使用如下查询:

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

问题是在查询中添加 count(*) 也会影响性能。

我可以将查询结果映射到 "Map Data" activity 然后使用 count($Map-Data/pfx:my_element/) 但我更愿意避免额外的不需要映射出于性能目的。

Tibco "Direct SQL" 和 Tibco "JDBC Query" 使用 Oracle (ojdbc7.jar) 和 DB2 (jt400.jar) 驱动程序。

有没有办法在不向查询输出添加计数的情况下从 tibco 端获取查询输出行数?

我终于得到了我需要的东西。我可以直接从 "SQL Direct" 或 "JDBC Query" 活动输出

使用 XPATH "count" 函数

"JDBC Query": 数($JDBC-Query/resultSet/Record) < 1000

"SQL Direct": 数($SQL-Direct/jdbcGeneralActivityOutput/unknownResultset/row) <1000