RDBMSクエリのANSIまたはISO標準はどこで入手できますか?

StackOverflow https://stackoverflow.com/questions/3155218

  •  01-10-2019
  •  | 
  •  

質問

sqlexceptionsなしで、ほぼすべてのデータベースで動作できるクエリをいくつか書きたいと思います。それでは、クエリを書くためにANSI標準をどこで入手できますか?

役に立ちましたか?

解決

それがあなたを助けるかどうかはわかりません。

ベンダーは標準の実装に関しては触れていて、多くの場合、標準自体が十分に不正確であるため、すべての実装者と連携するクエリを書くことができません。

たとえば、SQL 92は連結演算子を次のように定義します || しかし、MySQLもMSSQLもこれを使用していません(Oracleはそうします)。ベンダーの独立した文字列の連結は不可能です。

同様に、標準のエスケープキャラクターは指定されていないため、すべてのベンダーで機能しない可能性のある処理方法。

そうは言っても:

他のヒント

から ウィキペディア:

SQL標準は自由に利用できません。標準全体は、ISO/IEC 9075(1-4,9-11,13,14)としてISOから購入できます。

それにもかかわらず、この戦略に従うことはアドバイスしません。なぜなら、データベースエンジンはSQL標準(SQL 99、2003など)に従うことはないからです。それらはすべて、指示の処理方法や変数の定義方法で自由を取ります(たとえば、2つの文字列を異なるエンジンを比較すると、ケースの感度が異なります)。あるエンジンで非常に効率的な方法は、別のエンジンにとってひどい非効率的です。

提案は、クエリの標準グループを開発し、特定のターゲットRDBMのクエリの特定の実装を含むさまざまなクラスを開発することです。

これが役立ったことを願っています

で利用可能なコアSQLグラマーのBNFをチェックしてください http://savage.net.au/sql/

これは答えの一部です - キラヌとマットミッチェルが指摘したように、残りは異なるベンダーが標準を異なる方法で実装するということです。 DBMSはSQL-92でさえ完全に接着することはありませんが、ほとんどはかなり近いです。

1つの観察結果:SQL標準はインデックスについて何も述べていません。したがって、インデックスを作成するための標準的な構文はありません。また、データベースの作成方法についても何も述べていません。各ベンダーには、それを行うための独自のメカニズムがあります。

SQL-92標準 おそらくあなたがターゲットにしたいものです。主要なRDBMSのほとんどをサポートしていると思います。

がここにあります より低いリンク. 。サンプルコンテンツ:

  • PostgreSQLにはビューがあります。更新が表示されないことで標準を破る...
  • DB2は、少なくともSQL-92に準拠しています。
  • MSSQLは、少なくともSQL-92に準拠しています。
  • MySQLは、少なくともSQL-92に準拠しています。
  • Oracleは、少なくともSQL-92に準拠しています。
  • Informixは、少なくともSQL-92に準拠しています。

.netを使用している場合、あなたが考慮するかもしれない何かを使用することです System.data.commonの工場パターン これは、多くのRDBMSのプロバイダーの詳細を抽象化する良い仕事をしています。

複数のデータベースに対して動作する製品を作成しようとしている場合、標準のSQLのみを使用しようとすることは、標準の異なる「解釈」のために他の答えが示すように、行く方法ではありません。代わりに、可能であれば、アプリケーションに何らかのデータアクセスレイヤーがあり、各データベースに固有の実装が異なります。あなたがやろうとしていることに応じて、冬眠などのツールがあり、あなたのためにこれに関して多くの重い持ち上げがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top