まず初めに Oracle ServerとSQL Serverの代表的なオブジェクトを比較してみます。
Oracle Serverでは「表」、SQL Serverでは「テーブル」というように、それぞれ日本語と英語の呼び方で違いがあるところが不思議ですね。 Oracle Serverには存在するがSQL Serverに存在しないもの、またはSQL Serverには存在するがOracle Serverに存在しないものもいくつかあります。これは単に機能の優劣の問題ではありません。基本的な考え方の違いや構造の違いにより、このようなオブジェクトの違いが発生しています。上の表に挙げたオブジェクトの中で、Oracle Serverには存在するがSQL Serverに存在しない「シノニム」と「順序」について、SQL Serverではどのように対応しているかを以下で解説します。
シノニムは、他のユーザが所有するオブジェクに対してアクセスするとき、SQLの構文をシンプルにすることができるというメリットがあります。 まず、Oracle Serverでシノニムをどのように利用しているかを見てみましょう。
HRユーザが所有するEMPLOYEESテーブルへ別のユーザがアクセスする場合、次のようなクエリになります。
SELECT * FROM hr.employees;
ここでシノニムEMPを作成し、クエリを実行してみます。
・シノニムの作成 CREATE SYNONYM emp FOR hr.employees; ・クエリの実行 SELECT * FROM emp;
SQL Serverで同様のことを行う場合、一般的にはビューを使用します。その他ストアドファンクションを利用する方法もあります。
●ビューで対応する場合
・ビューの作成 CREATE VIEW emp AS SELECT * FROM hr.employees; ・クエリの実行 SELECT * FROM emp;
●ファンクションを利用する場合
・ファンクションの作成 CREATE FUNCTION emp() RETURNS table AS RETURN(SELECT * FROM hr.employees); ・クエリの実行 SELECT * FROM emp();
順序は主キーの列にデータをINSERTする場合に利用できるオブジェクトです。順序を利用することで、高いパフォーマンスで一意な番号を発行できます。SQL Serverには順序オブジェクトは存在しませんが、テーブルを定義するときに列のIDENTITYプロパティを使い、順序と同じ機能を実装できます。IDENTITYプロパティは次の3つのプロパティで構成されています。