その他: 埋め込みSQL

Magicから直接SQLコマンドを発行することができる機能です。
タスク環境の一番上のメニューです。
オンラインタスクでもバッチタスクでも使えます。
以下、使い方とポイントと注意点と主な用途です。

<使い方>
データベース欄にSQL発行先データベースをズームして選択入力します。
オンラインタスクで、SQLを実行した結果として複数レコードが返ることが予想されるときは、結果データベースを指定します。
ほとんどの場合、Memoryテーブルを選択しておけばよいでしょう。
(結果が1万件を超えるようならMemoryテーブル以外にします。)
SQLコマンド欄に自由なSQL文を入力します。
バージョンによって、入力できる文字数は違いますが、V9Plusであれば9999文字まで入ります。
しかし、あまり長くならないように注意します。
他人が見ても、パッと見でどんな内容か容易に判断できる程度の短さにしましょう。

<ポイント>
タスク特性のメインテーブルを指定してはいけません。
入力パラメータを使うときは、まずSQLコマンド欄に「:1」というようにパラメータが入る場所を宣言しておく必要があります。
また、SQLコマンドはタスク前処理の前に実行されるので、サブプログラムとして上位プログラムからコールされて入力パラメータを受け取る場合は、 親子タスク構造にして、親タスクはパラメータを受け取るだけ、子タスクでSQLコマンド実行とした方が動作が安定すると思われます。
V9PlusでOracleを使うのであれば、「:1」という書き方の代わりに「~1」というようにチルダを使う方法もあります。
ヘルプなどではバインディング変数として説明されていますが、理論的には「:1」より「~1」の方が高速化が期待できます。
オンラインタスクであれば、最後にAPGボタンを押すと、出力パラメータ用の変数と結果を表示するためのフォームを自動作成してくれます。

<注意点>
基本的には、どんなSQLを記述しても構いませんが、「COMMIT」と「ROLLBACK」は使えません。
記述したSQLの合否判定はMagicのチェック機能(F8)ではできません。

<主な用途>
・バッチの高速化:  大量レコードの削除処理など。
・テーブルのデータだけを全て削除:  TRUNCATEの実行。
・便利なSQL関数を使った高速実行:  特定範囲の合計や平均など。
・特殊なテーブル(ビュー)の情報参照:  V%SESSIONなど。