SQLでFOR UPDATEを使って更新する例
セレクト結果の1レコードずつ更新したい場合の例。 以下を参照して作成。
SET SERVEROUTPUT ON DECLARE cursor CUR is SELECT ID,NAME,UPDATE_TIME FROM テーブル名 WHERE '1000' <= ID AND ID <= '1999' FOR UPDATE; vIndex NUMBER(10); vSingle VARCHAR(10); vMulti VARCHAR(30); vName テーブル名.NAME%TYPE; vRec CUR%ROWTYPE; BEGIN vIndex := 1; OPEN CUR; LOOP FETCH CUR INTO vRec; EXIT WHEN CUR%NOTFOUND; vSingle := TO_CHAR(vIndex, 'FM0000'); vMulti := TO_MULTI_BYTE(vSingle); vName := vRec.NAME || vMulti; SYS.DBMS_OUTPUT.PUT_LINE('ID=' || vRec.ID || ' 氏名=' || vRec.NAME || ' 更新時刻=' || TO_CHAR(vRec.UPDATE_TIME, 'YYYY-MM-DD HH24:MI:SS') || ' 更新時刻-30日=' || TO_CHAR(vRec.UPDATE_TIME-30, 'YYYY-MM-DD HH24:MI:SS') || ' SINGLE=' || vSingle || ' MULTI=' || vMulti); UPDATE テーブル名 SET NAME=vName WHERE CURRENT OF CUR; vIndex := vIndex + 1; END LOOP; COMMIT; END; /