首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迁移到Oracle

迁移到Oracle
EN

Stack Overflow用户
提问于 2010-03-12 13:45:39
回答 4查看 158关注 0票数 3

我们正在使用一个Java应用程序,我们现在正在使用Informix DB.Our代码使用类似于"select first 10 * from test“这样的查询命中数据库。据我所知,Oracle不支持'first 10 *‘类型的statements.We,有超过1000个像this.Should这样的查询,我们可以手动更改这一点,还是可以进行一些手动自定义?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-03-12 13:51:26

这是一个很好的理由,要么尽可能只使用标准SQL,要么将这些依赖项隔离到存储过程中(是的,我知道这在这种特定情况下对您没有帮助,我只是想提一下以供将来参考)。

我怀疑您必须逐个更改它们,尽管在源代码中简单搜索"select“或"first”将是一个很好的开始。

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

无论如何,我认为您会得到与Oracle相同的效果

代码语言:javascript
复制
select * from ( select * from mytable ) where rownum <= 10

我将把动态构建查询的工作(基于模板)扩展到另一个层,该层可以根据您配置的数据库返回不同的查询。然后,当您还想支持DB2 (例如)时,只需更改该层就可以了。

例如,调用如下所示:

代码语言:javascript
复制
gimmeRowLimitedSqlQuery ("* from test",10);

这将为您提供以下两种情况之一:

代码语言:javascript
复制
select first 10 * from test
select * from test where rownum <= 10

我还应该提一下,尽管我知道您的查询只是一个示例,但是如果您不这样指定order by,SQL可以以任何顺序返回行。

代码语言:javascript
复制
select first 10 * from test

这没有什么意义,特别是如果你可能在不同的DBMS中运行它。

票数 2
EN

Stack Overflow用户

发布于 2010-03-12 13:50:12

您可以为JDBC驱动程序编写一个扩展来动态修改查询,但这可能有些过分,因此仔细搜索和替换源代码以修改所有查询会更合适。

票数 1
EN

Stack Overflow用户

发布于 2010-03-12 13:51:37

Oracle有用于限制结果的ROWNUM概念。为此,您必须更新您的查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2430745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档