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; /
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;
SQL*Plusでの表示の基本
備忘録。デフォルトだとなんであんなに見辛いんだろう。
set linesize 1000 set trimspool on set pagesize 0
Windows10の設定画面が開けない件
hatenaブログでmarkdownをデフォルトにする設定
編集方式を変更すると次に記事を書こうとしたときにもその変更内容が反映されていると思ったら反映されていなかった。毎回変更するのが面倒なので設定方法を見ていたらありました。
[設定]の[基本設定]にある「編集モード」で「Markdownモード」を選択する。
Excelで偶数行(奇数行)の合計を求める
意外とわからなかったので備忘録として記述。
探してみたところ以下のサイトが参考になった。
まず、SUMPRODUCT()なる関数がよくわからないのだが、"*"は論理積らしい。 で、上記サイトだとROW()で行数を求めて、その値をMOD()使って2で割った余りが0であれば偶数、1であれば奇数としてその論理値がTRUEのもののみを採用して加算する。
別の方法としてはMOD()じゃなくダイレクトにISEVEN(), ISODD()でもいける。
この画像内の計算式は以下。
=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)