2010-03-12 161 views
3

我们正在使用Java EE应用程序,我们现在正在使用Informix DB.我们的代码点击数据库,查询如 “select first 10 * from test” 现在据我所知,Oracle不支持'前10 *'种语句。我们有超过1000个像这样的查询。我们是否应该手动更改这个或者可以进行一些手动定制?迁移到Oracle

回答

2

这是或者只使用标准的SQL尽可能一个很好的理由,或用于隔离那些依赖关系到存储过程(是的,我知道这并不能帮助你在这种特殊情况下,我只是想我会提及它以备将来参考)。

我怀疑你将不得不单独更改每一个虽然对你的源代码的简单搜索“选择”或“第一”将是一个良好的开端。

然后,您可以决定如何您想要更改它们,因为您可能仍然希望它在Informix上工作。

对于它的价值,我觉得你得到同样的效果Oracle的

select * from (select * from mytable) where rownum <= 10 

我会种地的动态构造查询(基于模板)到另一个层面,因此可以返回工作根据您配置的数据库进行不同的查询。然后,当您还想支持DB2时(例如),只需更改该层即可。

例如,有这样一个电话:

​​3210

这将使你任:

select first 10 * from test 
select * from test where rownum <= 10 

我还要提到,虽然我知道您的查询只是一个例子,即SQL可以返回任意订单如果您没有指定order by那么

select first 10 * from test 

变得毫无意义,尤其是如果你可以在不同的DBMS运行它。

+0

使用rownum时需要小心 - 它应该几乎总是用在外部查询中,例如。 'select * from(...)where rownum <= 10' – 2010-03-12 09:30:38

+0

+1 to ar ..答案已经更新。 – 2010-03-13 02:47:03

+0

正如@paxdiablo暗示的那样,您需要在内部选择一个ORDER BY以获取任何明智的东西。 – 2010-03-17 12:18:22

1

你可以写一个扩展到JDBC驱动程序,以动态修改查询,但可能是矫枉过正,所以仔细的搜索和替换的源代码修改所有的查询会更合适。

0

甲骨文拥有ROWNUM限制结果的概念。你将不得不更新你的查询。