Миграция в Oracle - PullRequest
       39

Миграция в Oracle

3 голосов
/ 12 марта 2010

Мы используем приложение Java EE, и мы прямо сейчас используем Informix DB. Наш код попадает в БД с такими запросами, как «выберите первые 10 * из теста» Насколько я знаю, Oracle не поддерживает операторы типа «первые 10 *». У нас более 1000 таких запросов. Можем ли мы изменить это вручную или мы можем выполнить некоторые настройки вручную?

Ответы [ 4 ]

2 голосов
/ 12 марта 2010

Это хорошая причина, чтобы либо использовать как можно больше только стандартного 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

Я должен также упомянуть, хотя я понимаю, что ваш запрос является лишь примером, что SQL может возвращать строки в любом порядке, если вы не укажете order by, поэтому

select first 10 * from test

не имеет особого смысла, особенно , если вы можете запускать его в разных СУБД.

1 голос
/ 12 марта 2010

Вы можете написать расширение для драйвера JDBC для изменения запросов на лету, но, возможно, это излишнее, поэтому более уместным будет поиск и замена исходного кода для изменения всех запросов.

0 голосов
/ 12 марта 2010

Запросы TOP-n и Pagination немного сложнее, чем просто использование ROWNUM. Например, вас может удивить то, что вы не получите ожидаемых результатов при использовании ROWNUM с ORDER BY в одном запросе.

Проверьте http://www.oracle.com/technology/oramag/oracle/07-jan/o17asktom.html для получения дополнительной информации о запросах такого типа в Oracle.

0 голосов
/ 12 марта 2010

Oracle имеет концепцию ROWNUM для ограничения результатов. Вам придется обновить ваши запросы для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...