ストアドプロシージャ

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  データソースとターゲット > MapForce とデータベース >

ストアドプロシージャ

ストアドプロシージャとはデータベースサーバー上で動作するプログラムのことで、クライアントアプリケーションから呼び出されることになります。通常これらのプログラムは SQL を拡張した方言により記述され、データベースによっては、Java や .NET CLR といったプログラミング言語による実装をサポートしているものもあります。

 

ストアドプロシージャの典型的な使用方法には、データベースのクエリと呼び出し元のクライアントにデータを返す、または、入力パラメーターの追加検証の後にデータベースを変更するなどが挙げられます。ストアドプロシージャは電子メールの送信などデータベース外で他のアクションを実行することができます。

 

ストアドプロシージャは、ゼロ、または、1つ以上の入力と出力パラメーターをデフォルトの戻り値に加え持つことができます。 この結果、MapForce 内では、ストアドプロシージャを複数の方法で呼び出すことができます:

 

マッピング上のソースコンポーネントとしてデータを抽出するためにストアドプロシージャを呼び出します。入力パラメーターを取らないプロシージャのためにのみ適用することができます。マッピングが実行されると、プロシージャが呼び出され、レコードセット、または、出力パラメーターが返されます。レコードセット、または、出力パラメーター、または、両方をMapForce によりサポートされるデータ型にマップすることができます。例えば、 ストアドプロシージャとデータソースを参照してください。
パラメーターを持つ関数としてストアドプロシージャを呼び出します。この場合、マッピングから必要とされるすべての入力パラメーターを提供し、 MapForce によりサポートされる他のターゲットに返されたレコードセット、または、出力パラメーターをマップすることができます。 例えば、 入力と出力を持つストアドプロシージャを参照してください。
マッピング上のターゲットコンポーネントとしてストアドプロシージャを呼び出します。一般的なユースケースはデータベースを変更するためにパラメーターを持つストアドプロシージャを呼び出す場合です (例えば、レコードの挿入など)。このアプローチはストアドプロシージャから出力を呼び出す必要がない場合に適しています。また、このアプローチによりエラーが発生した場合ロールバックすることのできるデータベーストランザクション内でストアドプロシージャを実行することができます。  例えば、 ターゲットコンポーネント内のストアドプロシージャを参照してください。

 

(最初に挿入して、更新するなど)特定の順序でストアドプロシージャを呼び出す、または、データベーステーブル上でアクションを実行する必要がある場合があります。例えば、ストアドプロシージャの出力パラメーターを他のストアドプロシージャにパスする必要がある場合があります。または、ストアドプロシージャにより返されたデータをテーブルからのデータと組み合わせる必要がある場合があります。基になるデータベースがテーブル間の主/外部キー リレーションシップを強制しない場合でも、 MapForce 内で定義されているローカルリレーションを使用してこのようなアクションは可能になります。 詳細に関しては、 ストアドプロシージャとローカルリレーションを参照してください。

 

メモ:MapForce がどのようにストアドプロシージャを実行するか示すために、このチャプターは Microsoft SQL Server 2016 と 「AdventureWorks 2016」 データベースを使用しています。 後者は https://github.com/Microsoft/sql-server-samples/releases/tag/adventureworks からダウンロードすることができます。

 

サポートに関するメモ

BUILT-IN 実行エンジン内でのみストアドプロシージャを使用することができます。C++、C#、 または Java 内でのコード生成はサポートされていません。
ユーザー定義型、カー祖す型、変数型、多種の "エキゾチック" データベース固有のデータ型 (配列、形状、CLR 型) 通常は入力、または、出力パラメーター型としてサポートされません。
プロシージャと関数のオーバーロード (同じ名前と異なるパラメーターを持つルーチンの複数の定義)はサポートされません。
データベースによっては入力パラメーターにデフォルト値を定義することもできますが、この機能は現在サポートされていません。マッピングにて入力パラメーターへの接続が行われなかったとしても、デフォルト値が使用されることはありません。
複数のレコードを返すストアドプロシージャは、ドライバーとデータベース API (ODBC/ADO/ADO.NET/JDBC) の組み合わせによってはサポートされます。固定されたカラム構造を持った同じ数のレコードセットを返すプロシージャだけがサポートされます。
可能な場合、データベースのベンダーにより管理されているネイティブのドライバーの最新のバージョンを使用することが奨励されています。ODBC から ADO へのブリッジ、ODBC から JDBC へのブリッジなどのブリッジドライバーの使用を避けてください。
データターゲットとして呼び出されるストアドプロシージャのためのデータベーストランザクションを任意で有効化することができます。 ターゲットコンポーネント内のストアドプロシージャを参照してください。(入力パラメーターを持たない) データソースとして呼び出されるストアドプロシージャ、または、関数同様に呼び出される(入力と出力を持つ)関数のためにはトランザクションはサポートされていません。

 

次のテーブルリストはデータベース固有のサポートメモをリストしています。

 

データベース

サポートメモ

Access

Microsoft Access データベース内のストアドプロシージャには制限された機能のみを持ち、 MapForce 内ではサポートされません。

DB2

MapForce にてサポートされる対象: ストアドプロシージャ、スカラー関数、テーブル値関数。
MapForce 内で使用されるデータベース API により読み取ることができないため、 DB2 ストアドプロシージャからの戻り値はサポートされていません。
値関数 (RETURNS ROW) はサポートされません。
エラーと計画を読み取る際に、確認されている JDBC ドライバーの問題を避けるために、少なくとも "IBM_DB2 9.7 Fix Pack 3a" をインストールすることが奨励されます。不足する結果セット行を引き起こす ADO プロバイダーに関する問題をフィックスすることができます。

Firebird

MapForce にてサポートされる対象: ストアドプロシージャ、 テーブル値関数

Informix

MapForce にてサポートされる対象: ストアドプロシージャ、テーブル値関数。

MariaDB

MapForce ストアドプロシージャ、スカラー関数によりサポートされています。

MySQL

MapForce にてサポートされる対象: ストアドプロシージャ、スカラー関数
MySQL バージョン 5.5. 以降は、ストアドプロシージャに対する完全なサポートを含みます。これ以前のバージョンを使用する場合、 MapForce の機能性は制限されます。

Oracle

MapForce にてサポートされる対象:ストアドプロシージャ、スカラー関数、テーブル値関数。
Microsoft OLE DB Provider for Oracle の代わりにネイティブな Oracle ドライバーの使用が奨励されます。
Oracle では REF CURSOR 型の出力パラメーターを使用することで結果セットが返されます。この仕様はストアドプロシージャに対して MapForce でサポートされるものの、関数に対してはサポートされません。このため、Oracle ストアドプロシージャに対して常に固定された数と名前が使用されることになります。

 

PostgreSQL

MapForce にてサポートされる対象: スカラー関数、row-valued 関数、テーブル値関数。
PostgreSQL では、関数にて定義された任意の出力パラメーターにより、結果セットのカラムが記述されます。この情報は MapForce にて自動的に使用され、情報取得のための実行やレコードセットの入力を手動で行う必要はありません。refcursor 型のパラメーターはサポートされていません。

Progress OpenEdge

MapForce にてサポートされる対象:ストアドプロシージャ。

SQL Server

MapForce にてサポートされる対象: ストアドプロシージャ、スカラー関数、テーブル値関数。
Microsoft OLE DB Provider for SQL Server の代わりに最新の SQL Server Native Client ドライバーを使用することが奨励されます。
SQL Server 2008 にて導入されたいくつかのデータ型 (datetime2, datetimeoffset) に対して、ADO API は限られたサポートしか提供していません。ADO と SQL Server ネイティブクライアントを使用するなかで、新たな期間型にてデータの切り捨て問題に直面した場合、接続文字列に DataTypeCompatibility=80 という値を加えるか、ODBC を使用するようにしてください。 (datetime2, datetimeoffset)。
SQL Server プロシージャには暗黙的な型 int null の戻り値パラメーターが含まれており、これらの値をマッピングに使用することもできます。プロシージャにて RETURN ステートメントが省略された場合、戻り値は 0 となります。

SQLite

SQLite はストアドプロシージャを使用しません。

Teradata

MapForce にてサポートされる対象: ストアドプロシージャ、 マクロ。
スカラー関数、集計関数、およびテーブル関数はサポートされません。
既知の問題: Teradata ODBC ドライバーがプロシージャコールの後、出力パラメーターの値を作成することを拒否する問題。

(C) 2019 Altova GmbH