0

在我的 Tibco 流程中,只有当查询从 Tibco“Direct SQL”或 Tibco“JDBC Query”活动返回少于 1000 条记录时,我才有映射 SQL 查询输出的逻辑。

现在我只是运行相同的查询 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'

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

我在 SELECT 语句后需要行计数中找到了 SQL 方面的解决方案:什么是最佳 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 端获取查询输出行数?

4

1 回答 1

2

我终于得到了我需要的东西。我可以直接从“SQL Direct”或“JDBC Query”活动输出中使用 XPATH“count”函数

"JDBC 查询": count($JDBC-Query/resultSet/Record) < 1000

“SQL 直接”:计数($SQL-Direct/jdbcGeneralActivityOutput/unknownResultset/row)<1000

JDBC 查询行数

于 2018-04-18T21:11:40.280 回答