UPDATE

SQL言語で使用可能な UPDATE コマンドは、SPLプログラムでも使用できます。

SPL言語の式は、SQLの UPDATE コマンドで式を使用できる場所であればどこでも使用できます。したがって、SPL変数およびパラメーターを使用して、更新操作に値を提供できます。

CREATE OR REPLACE PROCEDURE emp_comp_update (
    p_empno         IN emp.empno%TYPE,
    p_sal           IN emp.sal%TYPE,
    p_comm          IN emp.comm%TYPE
)
IS
BEGIN
    UPDATE emp SET sal = p_sal, comm = p_comm WHERE empno = p_empno;

    IF SQL%FOUND THEN
        DBMS_OUTPUT.PUT_LINE('Updated Employee # : ' || p_empno);
        DBMS_OUTPUT.PUT_LINE('New Salary         : ' || p_sal);
        DBMS_OUTPUT.PUT_LINE('New Commission     : ' || p_comm);
    ELSE
        DBMS_OUTPUT.PUT_LINE('Employee # ' || p_empno || ' not found');
    END IF;
END;

SQL%FOUND 条件式は、行が更新されると TRUE を返し、そうでない場合は FALSE を返します。 SQL%FOUND および他の同様の式の説明については、:ref:「結果ステータスの取得<obtaining_the_result_status>」を参照してください。

以下は、この手順を使用した従業員の更新を示しています。

EXEC emp_comp_update(9503, 6540, 1200);

Updated Employee # : 9503
New Salary         : 6540
New Commission     : 1200

SELECT * FROM emp WHERE empno = 9503;

empno | ename  |  job   | mgr  |      hiredate     |  sal   | comm  | deptno
------+--------+--------+------+-------------------+--------+-------+-------
 9503 |PETERSON| ANALYST| 7902 | 31-MAR-05 00:00:00|6540.00 |1200.00|  40
(1 row)

注釈

UPDATE コマンドは FORALL ステートメントに含めることができます。 FORALL ステートメントを使用すると、1つの UPDATE コマンドで1つ以上のコレクションで提供された値から複数の行を更新できます。 FORALL ステートメントの詳細については、:ref:「FORALLステートメントの使用<using_the_forall_statement>」を参照してください。