変更された行を返す¶
データベース上で挿入や変更を行った行の値を取得すると、役立つ場合があります。INSERT および UPDATE ステートメントは RETURNING 句をサポートしているため、1 つのステートメントでこれを行うことができます。この句を使用すると、INSERTまたはUPDATE によって挿入または変更したばかりの行の値を取得するために、INSERT や UPDATE の後にクエリを実行する必要がなくなります。
RETURNING 句では、値を取得するフィールドの名前を指定します。
RETURNING を INSERT に追加すると、以下のタイプの値を取得するために役立ちます。
自動増分するフィールドの値。つまり、データベースが自動的に ID を割り当てる新しい行のフィールド。
自動生成されるフィールドの値。つまり、データベースが同じ行の他のフィールドの値に基づいて計算した値を割り当てるフィールド。
デフォルト値を持つフィールドの値。つまり、INSERT が値を提供しない場合に、データベースが自動的に値を割り当てるフィールド。
以下に例を示します。
INSERT INTO employee (name, email, department_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 が試みると、エラーを返すことがあります。