InterSystems SQL の機能
InterSystems SQL は、InterSystems IRIS® データ・プラットフォーム・データベースに格納されているデータに対し、徹底した標準リレーショナル・アクセスを提供します。
InterSystems SQL には、以下のような利点があります。
-
優れた性能とスケーラビリティ — InterSystems SQL は、従来のリレーショナル・データベース製品に比べ、高い性能とスケーラビリティを有しています。また、ラップトップ・コンピュータから高性能のマルチ CPU システムまで、さまざまなハードウェアやオペレーティング・システム上で動作します。
-
InterSystems IRIS オブジェクト・テクノロジとの統合 — InterSystems SQL は、InterSystems IRIS オブジェクト・テクノロジと密接に統合されています。データへのリレーショナル・アクセス、およびオブジェクト・アクセスの性能を低下させることなく、両方のアプローチを併用できます。
-
メンテナンスの低減 — 従来のリレーショナル・データベースとは異なり、InterSystems IRIS アプリケーションでは、配置したアプリケーションでテーブルを圧縮する必要がありません。
-
標準 SQL クエリをサポート — InterSystems SQL は、SQL-92 標準構文とコマンドをサポートします。したがって、既存のリレーショナル・アプリケーションを簡単に InterSystems IRIS に移行することができ (特殊な場合を除く)、InterSystems IRIS の優れたパフォーマンスと高性能なオブジェクトをご利用いただけます。
InterSystems SQL は、さまざまな用途に使用できます。
-
オブジェクト・ベース・アプリケーションと Web ベース・アプリケーション — InterSystems IRIS のアプリケーションでは、SQL クエリを使用して検索などの高機能なデータベース操作を実行できます。
-
オンライン・トランザクション処理 — InterSystems SQL は、挿入および更新操作や、トランザクション処理アプリケーションにおける一般的なクエリのタイプで優れた性能を発揮します。
-
ビジネス・インテリジェンスとデータウェア・ハウジング — InterSystems IRIS の多次元データベース・エンジンとビットマップ・インデックス・テクノロジの組み合わせにより、最高のデータ・ウェアハウス形式アプリケーションを提供します。
-
アドホック・クエリおよびレポート — InterSystems SQL に含まれているフル装備の ODBC ドライバと JDBC ドライバを使用して、一般のレポート・ツールやクエリ・ツールに接続できます。
-
エンタープライズ・アプリケーションの統合 — InterSystems SQL ゲートウェイにより、ODBC または JDBC 準拠の外部リレーショナル・データベースに保存されているデータへのシームレスな SQL アクセスが可能になります。これにより、さまざまなソースのデータを InterSystems IRIS アプリケーション内で簡単に統合できます。
アーキテクチャ
InterSystems SQL の核となる部分は、以下のコンポーネントで構成されます。
-
統一データ・ディクショナリ — 一連のクラス定義として保存されている、すべてのメタ情報の集積する場所。InterSystems IRIS は、統一ディクショナリに保存されるすべての永続クラスに対するリレーショナル・アクセス (テーブル) を自動的に生成します。
-
SQL プロセッサとオプティマイザ — SQL クエリを解析し分析する一連のプログラム。これは、(高性能コスト・ベース・オプティマイザを使用して) 既存のクエリに最も適した検索方法を決定し、クエリを実行するコードを生成します。
-
InterSystems SQL サーバ — InterSystems ODBC および JDBC ドライバとのすべての通信を担う、一連の InterSystems IRIS サーバ・プロセス。また、最も頻繁に使用するクエリのキャッシュも管理されています。同じクエリを何度も実行する場合、その実行プランをクエリ・キャッシュから取り出すことができるので、オプティマイザで再度処理する必要がありません。
機能
InterSystems SQL には、すべての標準的なリレーショナル機能が装備されています。これには、以下のものがあります。
-
テーブルやビューを定義します (DDL または Data Definition Language)。
-
テーブルやビューに対しクエリを実行します (DML または Data Manipulation Language)。
-
INSERT、UPDATE、DELETE 操作などの、トランザクションを実行します。同時操作を実行する際、InterSystems SQL は行レベル・ロックを使用します。
-
効率的にクエリを実行するために、インデックスを定義し使用します。
-
ユーザ定義タイプも含め、さまざまなデータ型に対応します。
-
ユーザとロールを定義し、それらに特権を与えます。
-
外部キーや、その他の整合性制約を定義します。
-
INSERT、UPDATE、DELETE の各トリガを定義します。
-
ストアド・プロシージャを定義、実行します。
-
クライアント・アクセスには ODBC モード、サーバ・ベース・アプリケーションで使用するには表示モードというように、異なる形式でデータを返します。
インターシステムズは、今後も引き続き InterSystems SQL のその他の機能のサポートを提供します。このリリースでサポートされていない機能をご希望の方は、今後の新しいリリースにその機能が追加されるかどうかなど、インターシステムズのサポート窓口Opens in a new tabまでお問い合わせください。
SQL-92 準拠
SQL-92 標準は算術演算子の優先順位に関して不明確です。この件に関する前提は SQL の実装間で異なります。InterSystems SQL では、SQL 算術演算子の優先順位についてシステム全体に以下のいずれかの処理方法を適用するようシステムを構成できます。
-
演算子の優先順位はなく、算術式を必ず左から右の順番で解析するよう InterSystems SQL を構成できます。これは、ObjectScript で使用される規則と同じです。例えば、3+3*5=30 となります。演算順位を指定するには、括弧を使用します。例えば、3+(3*5)=18 となります。
-
ANSI の優先順位を使用して算術式を解析するよう InterSystems IRIS を構成できます。この優先順位では、乗算演算子と除算演算子の優先順位が、加算演算子、減算演算子、および連結演算子よりも高く設定されます。例えば、3+3*5=18 となります。この優先順位は、必要に応じて括弧を使用することでオーバーライドできます。例えば、(3+3)*5=30 となります。
SQL 演算子の既定の優先順位は、InterSystems IRIS のバージョンによって異なります。詳細は、"SQL 算術演算子の優先順位" を参照してください。
InterSystems SQL は、下記の例外を除き、すべての初級 SQL-92 標準をサポートします。
-
テーブル定義に CHECK 制限を別途追加することはできません。
-
SERIALIZABLE 分離レベルはサポートされていません。
-
区切り識別子は、大文字と小文字を区別しません。SQL-92 標準では、大文字と小文字を区別する必要があります。
-
HAVING 節に含まれるサブクエリ内で、通常であれば、その HAVING 節で “使用可能な” 集合を参照できるようになっています。これはサポートされていません。
拡張機能
InterSystems SQL は、多数の便利な拡張機能をサポートします。これらの多くは、InterSystems IRIS がデータに対し同時にオブジェクト・アクセスとリレーショナル・アクセスを提供できるという機能に関連します。
以下は、その拡張機能の例の一部です。
-
ユーザ定義のデータ型と機能をサポートします。
-
後続のオブジェクト参照のための特別構文が使用できます。
-
サブクラスと継承をサポートします。
-
他のデータベースに保存されている外部テーブルに対するクエリをサポートします。
-
最高の性能を実現するために、テーブルの保存構成を管理するさまざまなメカニズムを提供します。
相互運用性
InterSystems SQL は、他のアプリケーションやソフトウェア・ツールをリレーショナルに相互運用する多くの方法をサポートします。
JDBC
InterSystems IRIS には、標準準拠のレベル 4 (すべて純正 Java コード) JDBC クライアントが含まれています。
InterSystems JDBC ドライバには、以下のような特徴があります。
-
高性能
-
純正 Java の実装
-
Unicode サポート
-
スレッドの安全性
JDBC をサポートするものであれば、あらゆるツール、アプリケーション、開発環境で InterSystems JDBC をご利用いただけます。互換性について問題が発生した場合やご質問等がございましたら、インターシステムズのサポート窓口Opens in a new tabまでお問い合わせください。管理ポータルから右上の [お問い合わせ] ボタンを使用して、インターシステムズのサポート窓口に問い合わせることができます。
ODBC
InterSystems SQL における C 言語の呼び出しレベルのインタフェースは、ODBC です。他のデータベース製品とは異なり、InterSystems ODBC ドライバはネイティブのドライバであり、他のメーカー独自のインタフェース上に構築されたものではありません。
InterSystems ODBC ドライバには、以下のような特徴があります。
-
高性能
-
移植性
-
ネイティブの Unicode のサポート
-
スレッドの安全性
ODBC をサポートするものであれば、あらゆるツール、アプリケーション、開発環境で InterSystems ODBC をご利用いただけます。互換性について問題が発生した場合やご質問等がございましたら、インターシステムズのサポート窓口Opens in a new tabまでお問い合わせください。管理ポータルから右上の [お問い合わせ] ボタンを使用して、インターシステムズのサポート窓口に問い合わせることができます。
埋め込み SQL
ObjectScript では、InterSystems SQL は埋め込み SQL をサポートします。つまり、メソッド (またはその他のコード) の本体内に SQL 文を配置できます。埋め込み SQL を使用すると、単一のレコードを照会できます (複数のレコードを照会するにはカーソルを定義して使用します)。埋め込み SQL は、コンパイルされます。既定では、埋め込み SQL を含むルーチンのコンパイル時ではなく、埋め込み SQL の初回実行時にコンパイルされます (ランタイム)。このため、実行時に SQLCODE エラーを確認することが重要です。埋め込み SQL を、それを含む ObjectScript ルーチンと同時にコンパイルすることもできます。
埋め込み SQL を InterSystems IRIS のオブジェクト・アクセス機能と併せて使用すると、非常に高い性能を発揮できます。例えば、次のメソッドは、特定の Name 値を持つレコードの RowID を検索します。
ClassMethod FindByName(fullname As %String)
{
&sql(SELECT %ID INTO :id FROM Sample.MyTable WHERE Name = :fullname)
IF SQLCODE<0 {SET baderr="SQLCODE ERROR:"_SQLCODE_" "_%msg
RETURN baderr }
ELSEIF SQLCODE=100 {SET nodata="Query returns no data"
RETURN nodata }
RETURN "RowID="_id
}
詳細は、“埋め込み SQL の使用法” の章を参照してください。
ダイナミック SQL
InterSystems IRIS は、標準ライブラリの一部として %SQL.StatementOpens in a new tab クラスを提供しており、(実行時に定義される) ダイナミック SQL 文を実行するときに使用できます。ダイナミック SQL は、ObjectScript メソッド内で使用できます。例えば、以下のメソッドでは、21 世紀に誕生した人物について、指定した人数分のクエリを実行します。このクエリは、1999 年 12 月 31 日より後に誕生したすべての人物を選択し、選択したレコードを誕生日順に並べ替えて、上位 x 件のレコードを選択します。
ClassMethod Born21stC(x) [ language=objectscript ]
{
SET myquery=2
SET myquery(1) = "SELECT TOP ? Name,%EXTERNAL(DOB) FROM Sample.Person "
SET myquery(2) = "WHERE DOB > 58073 ORDER BY DOB"
SET tStatement = ##class(%SQL.Statement).%New()
SET qStatus = tStatement.%Prepare(.myquery)
IF qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
SET rset = tStatement.%Execute(x)
DO rset.%Display()
WRITE !,"End of data"
}
クエリを準備すると、そのクエリの最適化されたバージョンがクエリ・キャッシュとして保存されます。それ以降にクエリを呼び出すと、このクエリ・キャッシュが実行され、実行のたびにクエリを再び最適化するオーバーヘッドがなくなります。
詳細は、“ダイナミック SQL の使用法” の章を参照してください。
制約
以下に、InterSystems SQL の制約を示します。
-
NLS を使用して、個々のグローバルおよび現在実行しているプロセスのローカル変数に特定の国言語ロケール動作の $ORDER の動作を指定できます。 InterSystems SQL は、あらゆる国言語ロケール内で使用でき、正常に動作します。 ただし、現時点では、特定のプロセスの場合に InterSystems SQL が参照する関連グローバルではすべて、現在のプロセスのロケールと同じ国言語ロケールを使用している必要があるという制約があります。このガイドの “照合” の章にある “SQL 照合と NLS 照合” を参照してください。