(免责声明:出于安全原因,我在这里更改/混淆了一些变量/表/列名称。如果看起来有点不对劲,请原谅我。)
我正在构建 Oracle 10g 数据库的前端,并且正在尝试获取分页数据。除了分页之外,下面的 SubSonic 2.2 代码按照我想要的顺序给了我想要的东西:
var q = new Select()
.From(AppDb.MyTable.Schema)
.Where(AppDb.MyTable.DisabledDateColumn).IsNull()
.OrderDesc(AppDb.MyTable.CreatedDateColumn.ColumnName)
System.Console.Out.Writeline(q.BuildStatement());
这会产生以下 SQL:
SELECT
MYSCHEMA.MYTABLE.ID,
MYSCHEMA.MYTABLE.DISABLED_DATE
FROM
MYSCHEMA.MYTABLE
WHERE
MYSCHEMA.MYTABLE.DISABLED_DATE IS NULL
ORDER BY
CREATED_DATE DESC
然后我尝试引入分页:
var q = new Select()
.From(AppDb.MyTable.Schema)
.Where(AppDb.MyTable.DisabledDateColumn).IsNull()
.OrderDesc(AppDb.MyTable.CreatedDateColumn.ColumnName)
.Paged(0, 10);
它消除了我的 WHERE 和 ORDER BY 子句:
SELECT * FROM (
SELECT
MYSCHEMA.MYTABLE.ID,
MYSCHEMA.MYTABLE.DISABLED_DATE,
ROWNUM as row_number
FROM
MYSCHEMA.MYTABLE
)
WHERE
row_number BETWEEN 1 AND 10
我是 SubSonic 的新手,所以我不知道这是否是一个错误,或者我只是没有以首选的方式进行操作,或者 Oracle 是否要求以不同的、更以 Oracle 为中心的方式来完成。(甲骨文似乎要求一切。)
如果不是很明显,我想要的是每个后续页面都包含 10 个下一个最近创建的非禁用记录。如何在 SubSonic 2.2 中做到这一点?