我们正在使用一个Java应用程序,我们现在正在使用Informix DB.Our代码使用类似于"select first 10 * from test“这样的查询命中数据库。据我所知,Oracle不支持'first 10 *‘类型的statements.We,有超过1000个像this.Should这样的查询,我们可以手动更改这一点,还是可以进行一些手动自定义?
发布于 2010-03-12 13:51:26
这是一个很好的理由,要么尽可能只使用标准SQL,要么将这些依赖项隔离到存储过程中(是的,我知道这在这种特定情况下对您没有帮助,我只是想提一下以供将来参考)。
我怀疑您必须逐个更改它们,尽管在源代码中简单搜索"select“或"first”将是一个很好的开始。
然后,您可以决定如何更改它们,因为您可能仍然希望它在Informix上工作。
无论如何,我认为您会得到与Oracle相同的效果
select * from ( select * from mytable ) where rownum <= 10我将把动态构建查询的工作(基于模板)扩展到另一个层,该层可以根据您配置的数据库返回不同的查询。然后,当您还想支持DB2 (例如)时,只需更改该层就可以了。
例如,调用如下所示:
gimmeRowLimitedSqlQuery ("* from test",10);这将为您提供以下两种情况之一:
select first 10 * from test
select * from test where rownum <= 10我还应该提一下,尽管我知道您的查询只是一个示例,但是如果您不这样指定order by,SQL可以以任何顺序返回行。
select first 10 * from test这没有什么意义,特别是如果你可能在不同的DBMS中运行它。
发布于 2010-03-12 13:50:12
您可以为JDBC驱动程序编写一个扩展来动态修改查询,但这可能有些过分,因此仔细搜索和替换源代码以修改所有查询会更合适。
发布于 2010-03-12 13:51:37
Oracle有用于限制结果的ROWNUM概念。为此,您必须更新您的查询。
https://stackoverflow.com/questions/2430745
复制相似问题