Перевод Microsoft T-SQL в Oracle SQL - PullRequest
20 голосов
/ 03 сентября 2008

Я работал с T-SQL в течение многих лет, но я только что перешел в организацию, которая потребует написания некоторого материала Oracle, возможно, просто простых операций CRUD, по крайней мере, до тех пор, пока я не найду ноги. Я не собираюсь переносить базы данных из одной в другую, просто взаимодействуя с существующими базами данных Oracle с точки зрения разработки приложений. Имеются ли инструменты или утилиты для простого перевода T-SQL в Oracle SQL, мне нужен поиск по ключевым словам.

P.S. Я слишком ленив к RTFM, к тому же это не будет большой частью моей роли, поэтому я просто хочу, чтобы что-то ускорило меня.

Ответы [ 12 ]

20 голосов
/ 12 марта 2009

Языковые различия, перечисленные до сих пор, составляют тривиальные по сравнению с логическими различиями. Любой может посмотреть NVL. Что трудно найти, это

DDL

На сервере SQL вы управляете своей схемой в любом месте, в любое время, практически без суеты.

В Oracle нам не нравится DDL в хранимых процедурах, поэтому у вас есть прыжок через обручи. Вам необходимо использовать EXECUTE IMMEDIATE для выполнения функции DDL.

Таблицы темпов

В SQL Server, когда логика становится немного жесткой, обычным делом является сокращение SQL-кода и его преобразование во временную таблицу, а затем следующий шаг выполняется с использованием этой временной таблицы. MSSS делает это очень легко.

В Oracle нам это не нравится. При форсировании промежуточного результата вы полностью не позволяете оптимизатору найти для вас ярлык. НО Если вы должны остановиться на полпути и сохранить промежуточные результаты, Oracle хочет, чтобы вы составляли временную таблицу заранее, а не на лету.

Замки

В MSSS вы беспокоитесь о блокировке, у вас есть подсказки nolock для применения к DML, у вас есть эскалация блокировок, чтобы уменьшить количество блокировок.

В Oracle мы не беспокоимся об этом таким образом.

Read Commited

До недавнего времени MSSS не полностью обрабатывал изоляцию Read Committed, поэтому вы беспокоились о грязном чтении.

Oracle был таким на протяжении десятилетий.

и т.д.

MSSS не имеет понятия индексов битовой карты, IOT, кластеров таблиц, хеш-кластеров одной таблицы, неуникальных индексов, обеспечивающих уникальные ограничения ....

14 голосов
/ 15 ноября 2011

У меня сложилось впечатление, что большинство ответов сосредоточены на переносе всей базы данных или просто указывают на некоторые различия между T-SQL и PL / SQL. У меня недавно была такая же проблема. База данных Oracle существует, но мне нужно преобразовать всю загрузку сценариев T-SQL в PL / SQL.

Я установил Oracle SQL Developer и запустил Редактор царапин перевода (Инструменты> Миграция> Редактор царапин перевода).

Затем просто введите свой T-SQL, выберите правильный перевод в раскрывающемся списке (по умолчанию это «T-SQL to PL / SQL») и преобразуйте его.

4 голосов
/ 19 апреля 2010

Я должен упомянуть.

1) Когда я работал над Oracle 8, вы не могли сделать «Select @Result», вам пришлось вместо этого использовать фиктивную таблицу следующим образом «Select @Result from dual». Не уверен, что эта нелепость все еще существует.

2) Кажется, в мире Оракула они любят курсоры, и вам лучше их читать, они используют их постоянно AFAICS.

Удачи и наслаждайтесь,

это не так уж отличается от MS SQL. К счастью, мне больше не нужно с этим работать, и я снова в теплом комфорте инструментов MS.

2 голосов
/ 05 сентября 2008

Если вы замените свой бред ISNULL и NVL на COALESCE, он будет работать в T-SQL и PL / SQL!

2 голосов
/ 03 сентября 2008

Наиболее важные отличия для простого T-SQL:

  • NVL заменяет ISNULL
  • SYSDATE заменяет GETDATE ()
  • CONVERT не поддерживается
  • Столбцы идентификаторов должны быть заменены последовательностями <- технически не T- или PL /, а просто SQL </li>

Примечание. Я предполагаю, что вы не используете устаревший SQL Server * = синтаксис для объединений

@ jodonell: таблица, на которую вы ссылаетесь, немного устарела, oracle стал более совместимым со стандартами после поддержки 9i таких вещей, как внешние соединения CASE и ANSI

1 голос
/ 20 декабря 2010

В Oracle SQL Developer есть инструмент, который называется Редактор царапин перевода. Вы можете найти его в Инструменты> Миграция.

Oracle SQL Developer можно бесплатно загрузить с сервера Oracle и легко установить.

1 голос
/ 19 апреля 2010

Я сделал несколько SQL-серверов для оракула миграции. Нет способа миграции без перезаписи внутреннего кода. Слишком много различий между двумя базами данных и, что более важно, различий между двумя наборами мышления программистов. Многие менеджеры считают, что эти 2 являются взаимозаменяемыми, у меня есть менеджеры, которые просят меня скопировать хранимые процедуры с SQL-сервера и скомпилировать их в oracle, а не в ключе! На сегодняшний день Toad - лучший инструмент на рынке для поддержки приложений оракула. Разработчик SQL в порядке, но разочаровывает по сравнению с жабой. Я надеюсь, что оракул однажды поймает их продукт до жабы, но его пока нет. Удачного дня :) Скорее всего, если вы переходите на Oracle, это по какой-то причине, и для того, чтобы выполнить это требование, вам потребуется переписать внутренний код, иначе у вас будет много проблем.

1 голос
/ 03 сентября 2008

Нетривиально отображать их туда-сюда, поэтому я сомневаюсь, что есть инструмент, который делает это автоматически. Но эта ссылка может вам помочь: http://vyaskn.tripod.com/oracle_sql_server_differences_equivalents.htm

0 голосов
/ 29 января 2019

У jOOQ есть общедоступный бесплатный переводчик, доступ к которому можно получить на веб-сайте здесь:

Он поддерживает DML, DDL и несколько процедурных синтаксических элементов. Если вы хотите выполнить перевод локально через командную строку, вы можете приобрести лицензию, а командная строка работает следующим образом:

$ java -cp jooq-3.11.9.jar org.jooq.ParserCLI -t ORACLE -s "SELECT substring('abcde', 2, 3)"
select substr('abcde', 2, 3) from dual;

См .: https://www.jooq.org/doc/latest/manual/sql-building/sql-parser/sql-parser-cli

(Отказ от ответственности, я работаю на поставщика)

0 голосов
/ 19 апреля 2010

Несколько человек упомянули здесь преобразование назад и вперед. Я не знаю инструмента для преобразования из MSSQL в Oracle, но я использовал бесплатный инструмент MS для преобразования базы данных Oracle в MSSQL, и он работал для меня и преобразовал большую базу данных без проблем, которые я могу вызвать. Это похоже на инструмент доступа к MSSQL, который MS также предоставляет бесплатно. Наслаждайтесь

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