メインソースの代わりに埋め込みSQLが定義されているタスクは、通常のMagicタスクと同じ機能を持ちます。ただし、以下のような制約事項があります。
SQLコマンドで使用されている全てのテーブルは、[SQL コマンド]ダイアログの[データベース]欄で宣言されているデータベースのものでなければなりません。異なるデータベースのテーブルを組み合わせることはできません。
オンラインタスクでは、SQL コマンドのビュー(結果テーブル)のカラムを更新することはできません。また、更新しても、その更新はディスクには書き込まれません。これは、結果テーブルはタスクが終了すると同時に削除されるためです。更新を行いたい時には、別のテーブルをリンクして使用してください。
レコードが親タスクの現在のビューである場合、そのレコードの状態を変更するようなコマンドは使用しないでください。
バッチタスクの場合、項目のグループレベルを更新しないでください。グループレベル処理では、一つ前のレコードの更新が必要になりますが、バッチタスクの場合、タスクのデータストリームは一方通行で停止することができず、ブレイクレベルの更新を行うことができません。
バッチSQLコマンドでは、タスクレベルのトランザクションを使用します。
埋め込みSQLでCOMMIT、ROLLBACK の各コマンドを使用した場合、それらがMagicのトランザクション内で生成されないと、その結果は予測できません。COMMIT とROLLBACK は、Magic のタスクレベルテーブルで適切なトランザクションモードを選ぶことによってのみ正常に機能します。
SQL文はRDBMS によって実行されます。コマンドの構文を決めるのは開発者の責任であり、開発者はDBMS 固有の拡張機能を自由に利用できます。ただし、各種のSQL DBMS間でアプリケーションの可搬性が必要とされる場合は、DBMS 固有のSQL 拡張を埋め込みSQL に組み込まないように注意してください。これはMagic が作成したSQL 文では問題となりません。Magic ゲートウェイはデータベースごとに、正確で最適化された構文を生成します。
埋め込みSQL をオンラインタスクで使用すると、Magic によって一時テーブルが作成されます。このテーブルは任意にデータベース内に作成できます。通常は、Magic に各レコードの読み取りと書き込みを行わせるより、RDBMS のユーティリティを利用してその同じRDBMS 内に一時テーブルを作成する方が効率が高くなります。
埋め込みSQL タスクの範囲指定は使用できません。
ストアドプロシジャを実行する時は、以下の形式で名前のすぐ前にexec を指定します。
exec sp_order_update |
APG で作成されたステートメントは、ゲートウェイにより実行されます。この場合、結果セットの形式も正しく解釈されます。また、データの取り出しだけでなく、データを変更するステートメントも作成できます。
DB2 UDBとODBC は、埋め込みSQL の結果データベースとして利用できません。