変更された行を返す

データベース上で挿入や変更を行った行の値を取得すると、役立つ場合があります。INSERT および UPDATE ステートメントは RETURNING 句をサポートしているため、1 つのステートメントでこれを行うことができます。この句を使用すると、INSERTまたはUPDATE によって挿入または変更したばかりの行の値を取得するために、INSERT や UPDATE の後にクエリを実行する必要がなくなります。

RETURNING 句では、値を取得するフィールドの名前を指定します。

RETURNING を INSERT に追加すると、以下のタイプの値を取得するために役立ちます。

  • 自動増分するフィールドの値。つまり、データベースが自動的に ID を割り当てる新しい行のフィールド。

  • 自動生成されるフィールドの値。つまり、データベースが同じ行の他のフィールドの値に基づいて計算した値を割り当てるフィールド。

  • デフォルト値を持つフィールドの値。つまり、INSERT が値を提供しない場合に、データベースが自動的に値を割り当てるフィールド。

以下に例を示します。

INSERT INTO employee (name, email, deparment_id) VALUES ('Jackson, Peter', 'pjackson@acme.com', 10)
RETURNING salary;

この INSERT は従業員のフィールド「salary」の値を返します。

この例では、INSERT が値を提供しない場合に、データベースが新しい従業員のフィールド「salary」に自動的に値を割り当てるものとします。


UPDATE では、RETURNING で使用可能なデータは、変更された行の新しい内容です。以下に例を示します。

UPDATE employee SET salary = salary * 1.03
WHERE department = 'hr'
RETURNING salary, bonus;

このステートメントは列 salary の値を変更し、人事部門の従業員のボーナスと新しい給与を返します。

制限事項

  • この機能は、データを JDBC データベースから取得しているビューでのみ使用可能です。その他のタイプのソースでは使用できません。

  • この機能は、基盤となるデータベースに依存して、リクエストされたフィールドを返します。ほぼすべてのデータベースが RETURNING をサポートしていますが、多くはRETURNING 句に渡すことができるフィールドに制限があります。たとえば、多くのデータベースは、UPDATE ステートメントが 2 行以上を変更する場合に、このステートメントの RETURNING 句を無効にします。その他のデータベースでは、プライマリキーの値のみを返すようサポートしている、などです。

  • Denodo の実行エンジンは、これらの制限をチェックしません。RETURNING 句のフィールドをデータベースに渡すのみです。基盤となるデータベースは、データベースが返すことができない値の取得を INSERT や UPDATE が試みると、エラーを返すことがあります。