複合 SQL を使用すると、複数の SQL ステートメントを単一の実行可能ブロックにまとめることができます。 このブロックの中の SQL ステートメント (sub-statements) は、 個々に実行することもできますが、 ステートメント・ブロックごとに作成および実行すればデータベース・マネージャーのオーバーヘッドが少なくなります。 リモート・クライアントの場合は、複合 SQL を使うことによって、 ネットワークで送信する必要のある要求の数を少なくすることもできます。
複合 SQL には、次の 2 つの種類があります。
アプリケーションは、すべてのサブステートメントが正常完了したとき、 または 1 つのサブステートメントがエラー終了したときに、 データベース・マネージャーから応答を受信します。 1 つのサブステートメントがエラー終了すると、 そのブロック全体がエラー終了したとみなされ、 そのブロックの中でのデータベースに対する変更がすべてロールバックされます。
アプリケーションは、すべてのサブステートメントが完了したときにデータベース・マネージャーから応答を受信します。 先行するサブステートメントが正常完了したかどうかに関係なく、 ブロックの中のすべてのサブステートメントが実行されます。 このグループのステートメントをロールバックできるのは、 「非アトミック」複合 SQL を含む作業単位がロールバックされる場合だけです。