SQLでFOR UPDATEを使って更新する例

セレクト結果の1レコードずつ更新したい場合の例。 以下を参照して作成。

SQL を繰り返し実行する

【ORACLE】日付の加算減算、時刻の加算減算

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;
/

PL/SQLのFORループで指定IDのデバッグ表示

テーブルのIDカラムが4桁(0000 .. 0009)の場合。

SET SERVEROUTPUT ON

DECLARE
  vID テーブル名.ID%TYPE;
  vName テーブル名.NAME%TYPE;
  vUpdateTime テーブル名.UPDATE_TIME%TYPE;
BEBIN
  FOR i IN 0 .. 9 LOOP
    vID := TO_CHAR(i, 'FM0000'); -- 4桁
    SYS.DBMS_OUTPUT.PUT_LINE('ID=' || vID);
    
    SELECT NAME,UPDATE_TIME
      INTO vName, vUpdateTime
      FROM テーブル名
     WHERE ID=vID;
    
    vName := vName || TO_MULTI_BYTE(vID); -- IDも全角変換
    SYS.DBMS_OUTPUT.PUT_LINE('氏名=' || vName || ' 更新時刻=' || vUpdateTime);
  END LOOP;
END;
/

javascriptで幅高さを取得する方法

var width = window.innerWidth || document.documentElement.clientWidth;
var height = window.innerHeight || document.documentElement.clientHeight;

によりIE互換モードの際は次のようにdocument.body.*を追加。

var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;

Windows10の設定画面が開けない件

Windows10 Professional on Parallelsの設定画面が開かない(というか二度目以降が開かない)件。 設定画面だけでなくEdgeも同じ状態。で、なぜか以下のAcerのページで回答があった。

[Windows10] スタートメニュー・設定画面が開かない。または、すぐに閉じてしまう

でここでstartmenu.diagcabをダウンロード。

startmenu.diagcabのダウンロード

でダウンロード後、実行したら治った。Edgeも二度目以降開かないのも治った。

hatenaブログでmarkdownをデフォルトにする設定

編集方式を変更すると次に記事を書こうとしたときにもその変更内容が反映されていると思ったら反映されていなかった。毎回変更するのが面倒なので設定方法を見ていたらありました。

[設定]の[基本設定]にある「編集モード」で「Markdownモード」を選択する。

Excelで偶数行(奇数行)の合計を求める

意外とわからなかったので備忘録として記述。

探してみたところ以下のサイトが参考になった。

enterprisezine.jp

まず、SUMPRODUCT()なる関数がよくわからないのだが、"*"は論理積らしい。 で、上記サイトだとROW()で行数を求めて、その値をMOD()使って2で割った余りが0であれば偶数、1であれば奇数としてその論理値がTRUEのもののみを採用して加算する。

別の方法としてはMOD()じゃなくダイレクトにISEVEN(), ISODD()でもいける。

f:id:kazuokohchi:20171208205750p:plain

この画像内の計算式は以下。

=SUMPRODUCT((MOD(ROW(B2:B9),2)=0)*B2:B9)
=SUMPRODUCT((MOD(ROW(B2:B9),2)=1)*B2:B9)
=SUMPRODUCT(ISEVEN(ROW(B2:B9))*B2:B9)
=SUMPRODUCT(ISODD(ROW(B2:B9))*B2:B9)