Единственным, о котором я знаю, является Boehm, который в нижней части является традиционной меткой и разверткой. Это, вероятно, использует различные методы для оптимизации этого, но обычно возрастающее/поколений/уплотнение GC будет трудно создать для C++, не идя для управляемого подмножества такой как, что можно получить с.Net C++. Некоторые подходы, которые должны переместить указатели, могут быть реализованы с поддержкой компилятора прикрепления указателей или блоков чтения-записи, хотя, но эффект на производительность может быть слишком большим, и это - не обязательно нетривиальные изменения в GC.
Ожидайте несколько мелких неровностей на дороге, но в целом все должно быть относительно легко.
Из списка функций, которые вы в настоящее время используете, должно быть только несколько синтаксических или семантических различий, в общем легко исправить или учесть. То, что вы не используете PL / SQL и / или хранимые процедуры, является плюсом. Хорошее практическое правило - стараться придерживаться SQL-92, который поддерживает большинство СУБД, в частности Oracle и MySQL. (Обратите внимание, что это не текущий стандарт SQL, которым является SQL-2008).
Некоторые из отличий:
что кажется хорошим ресурсом о различиях между реализациями SQL .
Чтение ответов других, да, DDL, может быть проблемой. Я обесценил это, вероятно, потому что многие приложения не требуют DDL, вам просто нужно сразу установить схему данных и т. Д., А затем просто использовать SQL для запроса, добавления или обновления данных.
Чтение ответов других, да, DDL, могло быть проблемой. Я обесценил это, вероятно, потому что многие приложения не требуют DDL, вам просто нужно сразу установить схему данных и т. Д., А затем просто использовать SQL для запроса, добавления или обновления данных.
Чтение ответов других, да, DDL, могло быть проблемой. Я обесценил это, вероятно, потому что многие приложения не требуют DDL, вам просто нужно сразу установить схему данных и т. Д., А затем просто использовать SQL для запроса, добавления или обновления данных.
Вы определенно не сможете сохранить свой DDL таким же. Что касается DML, есть много общего (есть базовое подмножество стандарта ANSI SQL, поддерживаемое каждой базой данных), но есть и некоторые различия.
Для начала, MySQL использует значения автоматического приращения, а Oracle использует последовательности. Это можно обойти (последовательность + триггер на стороне Oracle для имитации автоматического увеличения), но он есть. Встроенные функции совершенно разные.
В основном, в зависимости от того, что именно вы собираетесь использовать, может или не может быть возможно сохранить один набор операторов для обоих. Между прочим, даже с диалектами Hibernate не всегда возможно иметь один и тот же набор запросов - HQL прекрасен, но не всегда достаточно.
В дополнение к тому, что было упомянуто другими, 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)
Так что вам, возможно, придется преобразовать некоторые внешние соединения.
Я считаю, что поддержание единого набора файлов ресурсов 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
Oracle обрабатывает пустые строки как пустые. MySQL обрабатывает пустые строки как пустые строки и нулевые строки как пустые строки.