SQL enhancements
================

EDB Postgres Extended Serverには、多数のSQLの機能強化が含まれています。

ロールバックオプション
----------------------

PostgreSQLでは、トランザクションでエラーが発生すると、そのトランザクションによるすべてのアクションがロールバックされます。この動作は、エラーによって最後のステートメントのみがロールバックされるOracleやSQL
Serverなどの他のDBMSとは異なります。トランザクション処理セマンティクスのこの違いは、すべての場合で問題を引き起こすわけではありませんが、Oracle
DatabaseおよびMicrosoft SQL
Serverの開発者にとって、PostgreSQLでのビジネスロジックの実装が困難になります。

1つの回避策は、内部でサブトランザクションとして知られるセーブポイントをアプリケーションコードに手動で導入することです。これは時間がかかり、テストが困難です。セーブポイントは追加のステートメントであるため、トランザクションのレイテンシーが増加します。追加の開発作業のオーバーヘッドとパフォーマンスの低下を考慮すると、このアプローチはほとんどの場合実行可能ではありません。

EDB Postgres Extended
Serverでは、現在のステートメントのみをロールバックできます。ステートメントレベルのロールバック機能は、トランザクション全体または現在のステートメントのみのロールバックを許可するかどうかを選択するオプションのモードを提供します。手動でのコーディングは必要ありません。若干のオーバーヘッドが追加されますが、セーブポイントよりも低いです。

データベース内のトランザクションロールバックスコープの設定については :ref:`transaction_rollback_scope <transaction_rollback_scope>` を参照し、JDBCバッチジョブのエラーを過ぎて続行する方法については :ref:`JDBC properties for rollback scope <JDBC properties for setting rollback scope>` を参照してください。

準備されたステートメントを使用したカーソル
------------------------------------------

EDB Postgres Extended
Serverでは、以前に作成したプリペアドステートメントの上でカーソルを宣言できます。

例

::

   PREPARE foo AS ...; DECLARE c1 CURSOR FOR foo;

PL/pgSQLの互換性
----------------

EDB Postgres Extended
Serverは、多くのPL/pgSQL互換性機能を備えた他の移行ツールと統合しています。

全体的な簡素化のために、 EDB Postgres Extended Serverでは、
PERFORMキーワードなしでplpqslを使用してファンクションを呼び出すことができます。

例

::

   BEGIN somefunc(); END

``somefunc`` はキーワードではありません。

.. toctree::
  :maxdepth: 3

  Reference--sql_features--txnrollback
  Reference--sql_features--jdbctxnrollback
