Perl准备DB2语句不返回我需要的东西

时间:2010-08-05 21:19:03

标签: perl db2 prepare

由于我使用的是DB2,为了在中间选择数据库的一部分(如限制/偏移配对),我需要做一个不同类型的prepare语句。我得到的例子是:

SELECT * FROM(SELECT col1,col2,col3,ROW_NUMBER()OVER()AS RN FROM table)AS cols RN在1和10000之间的区域;

我适应了这个:

SELECT * FROM(SELECT ROW_NUMBER()OVER(ORDER BY 2,3,4,6,7 ASC)AS rownum FROM TRANSACTIONS)AS foo WHERE rownum> = 500 AND rownum< 1000

当我调用fetchall_arrayref()时,我确实想出500个结果,但它只返回一个引用行号的数组,而不是我想要的所有数据。我知道这是一个事实,这就是代码被写作所支持的内容,我已经尝试了一堆排列来获得我想要的结果而没有运气。

我想要的就是把我之前的prepare语句中的所有列都集成到一个数组数组中: SELECT * FROM TU_TRANSACTIONS ORDER BY 2,3,4,6,7

但仅限于指定的部分。我缺少一个基本的东西,我只是看不到它。

任何帮助都会受到赞赏,即使它与一些建设性的批评相结合。

2 个答案:

答案 0 :(得分:1)

你的表格表达式:

(SELECT ROW_NUMBER()OVER(订购2,3,4,6,7 ASC)作为rownum FROM TRANSACTIONS)as foo

只有一列 - rownum - 所以当你从“foo”中选择“*”时,你只得到一列。

您的表格表达式需要包含您想要的所有列,就像您发布的示例一样。

答案 1 :(得分:0)

我不使用DB2,所以我可能会离开基础,但似乎:

SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY 2,3,4,6,7 ASC) AS rownum FROM TRANSACTIONS) AS foo WHERE rownum >= 500 AND rownum <1000

只会返回行号,因为子查询引用表时主查询不会。它似乎只会看到一组数字(这将返回一个数字填写的单列)

也许这会奏效:

SELECT * FROM TRANSACTIONS, (SELECT ROW_NUMBER() OVER (ORDER BY 2,3,4,6,7 ASC) AS rownum FROM TRANSACTIONS) AS foo WHERE rownum >= 500 AND rownum <1000