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 の使用法” の章を参照してください。