Поддержка и Oracle и MySQL: насколько подобный их синтаксис SQL?

Единственным, о котором я знаю, является Boehm, который в нижней части является традиционной меткой и разверткой. Это, вероятно, использует различные методы для оптимизации этого, но обычно возрастающее/поколений/уплотнение GC будет трудно создать для C++, не идя для управляемого подмножества такой как, что можно получить с.Net C++. Некоторые подходы, которые должны переместить указатели, могут быть реализованы с поддержкой компилятора прикрепления указателей или блоков чтения-записи, хотя, но эффект на производительность может быть слишком большим, и это - не обязательно нетривиальные изменения в GC.

5
задан Jim Ferrans 21 November 2009 в 05:04
поделиться

5 ответов

Ожидайте несколько мелких неровностей на дороге, но в целом все должно быть относительно легко.

Из списка функций, которые вы в настоящее время используете, должно быть только несколько синтаксических или семантических различий, в общем легко исправить или учесть. То, что вы не используете PL / SQL и / или хранимые процедуры, является плюсом. Хорошее практическое правило - стараться придерживаться SQL-92, который поддерживает большинство СУБД, в частности Oracle и MySQL. (Обратите внимание, что это не текущий стандарт SQL, которым является SQL-2008).

Некоторые из отличий:

  • "LIMIT" - известное правило: для ограничения количества строк, извлекаемых в списке результатов, MySQL использует LIMIT n, в конце запроса Oracle использует RowNumber () в предложении WHERE (что неудобно, так как вам также нужно ссылаться на него в списке SELECT ...)
  • Некоторые типы данных отличаются. Я думаю, что в основном BOOLEAN (но кто этим пользуется ;-)). Также некоторые, я думаю, тонкие различия с типом / форматом DATETIME.
  • Некоторые имена функций отличаются (SUBSTRING против SUBSTR и т.п.)

что кажется хорошим ресурсом о различиях между реализациями SQL .

Чтение ответов других, да, DDL, может быть проблемой. Я обесценил это, вероятно, потому что многие приложения не требуют DDL, вам просто нужно сразу установить схему данных и т. Д., А затем просто использовать SQL для запроса, добавления или обновления данных.

Чтение ответов других, да, DDL, могло быть проблемой. Я обесценил это, вероятно, потому что многие приложения не требуют DDL, вам просто нужно сразу установить схему данных и т. Д., А затем просто использовать SQL для запроса, добавления или обновления данных.

Чтение ответов других, да, DDL, могло быть проблемой. Я обесценил это, вероятно, потому что многие приложения не требуют DDL, вам просто нужно сразу установить схему данных и т. Д., А затем просто использовать SQL для запроса, добавления или обновления данных.

9
ответ дан 18 December 2019 в 06:23
поделиться

Вы определенно не сможете сохранить свой DDL таким же. Что касается DML, есть много общего (есть базовое подмножество стандарта ANSI SQL, поддерживаемое каждой базой данных), но есть и некоторые различия.

Для начала, MySQL использует значения автоматического приращения, а Oracle использует последовательности. Это можно обойти (последовательность + триггер на стороне Oracle для имитации автоматического увеличения), но он есть. Встроенные функции совершенно разные.

В основном, в зависимости от того, что именно вы собираетесь использовать, может или не может быть возможно сохранить один набор операторов для обоих. Между прочим, даже с диалектами Hibernate не всегда возможно иметь один и тот же набор запросов - HQL прекрасен, но не всегда достаточно.

3
ответ дан 18 December 2019 в 06:23
поделиться

В дополнение к тому, что было упомянуто другими, oracle и mysql по-разному обрабатывают внешние соединения. На самом деле Oracle предлагает синтаксис, с которым mySql не справится, но Oracle справится со стандартным синтаксисом.

Только Oracle:

SELECT a.foo, b.bar
  FROM a, b
 WHERE a.foo = b.foo(+)

mySql и Oracle:

SELECT a.foo, b.bar
     FROM a 
LEFT JOIN b 
       ON (a.foo=b.foo)

Так что вам, возможно, придется преобразовать некоторые внешние соединения.

4
ответ дан 18 December 2019 в 06:23
поделиться

Я считаю, что поддержание единого набора файлов ресурсов SQL с MySQL и Oracle имеет несколько недостатков, поскольку оказывается между обратной совместимостью и решением конкретной проблемы. лучше всего иметь sql для каждого механизма SQL и, таким образом, максимизировать возможности каждого.

Функции, которые выглядят одинаково в брошюре, могут быть реализованы по-разному.

см. эти примеры

Ограничение наборов результатов

MYSQL

SELECT columns
FROM tablename
ORDER BY key ASC
LIMIT n

ORACLE

SELECT * FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber,
    columns
  FROM tablename
)
WHERE rownumber <= n

Ограничение - со смещением

MYSQL

SELECT columns
FROM tablename
ORDER BY key ASC
LIMIT n OFFSET skip

ORACLE

SELECT * FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY key ASC) AS rn,
    columns
  FROM tablename
)
WHERE rn > skip AND rn <= (n+skip)

Вы можете проверить это Сравнение различных реализаций SQL

7
ответ дан 18 December 2019 в 06:23
поделиться

Oracle обрабатывает пустые строки как пустые. MySQL обрабатывает пустые строки как пустые строки и нулевые строки как пустые строки.

2
ответ дан 18 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: