プロジェクトでOracleを使用しており、MySQLもサポートしたいと考えています。彼らのSQL方言はどれくらい近いですか?
体操をあまりしなくても、両方に同じSQLソースを使用することさえ可能でしょうか?
詳細:
- SQLステートメントをリソースファイルにクリーンに分離する永続マネージャーであるiBatisを使用しています。ただし、SQLレベルで作業します。これには、長所(および短所)があります。
- 方言の違いから完全に保護するHibernateのようなオブジェクトリレーショナルマッパーに移動したくない。
- OracleSQLの汎用サブセットを維持するように努めました。
- PL/SQLはありません。
- ストアドプロシージャやトリガーは使用しません(とにかく)。
- チェック制約、一意の制約、および外部キー制約を使用します。
- ONDELETECASCADEを使用します。
- トランザクションを使用します(iBatis APIレベルで実行されます)。
- クエリでいくつかのOracleタイムスタンプ関数を呼び出します。
- MySQLでInnoDBストレージエンジンを使用します(トランザクションと制約をサポートします)。
それで、あなたの考えは何ですか?方言ごとに1つずつ、2つの異なるiBatis SQLリソースファイルのセットを維持する必要がありますか、それともMySQLとOracleの両方をサポートするSQLの単一のセットを持つことは可能ですか?
最終更新:すべての回答、特に相違点に関するTroelsArvinのページへのポインタに感謝します。標準が標準ではないのは本当に残念です。私たちにとっての問題は、MySQLの自動インクリメントとOracleシーケンス、MySQLLIMITとOracleRowumber()、そしておそらく1つか2つの奇妙な関数であることがわかりました。@mjvが指摘しているように、SQL-92を使用していることを確認するために、他のほとんどすべてを非常に簡単に転送する必要があります。より大きな問題は、一部のクエリを各DBMSで異なる方法で手動で最適化する必要がある場合があることです。