2014/02/22

【PL/SQL】性能改善のためのバインド変数(ホスト変数)の使い方

bind
Oracle PL/SQLを使っている現場で、動的SQLを組むときは必ずバインド変数(ホスト変数)を使用しなければならない。
※正式呼称は「バインド変数」が正しいため、以下バインド変数で統一する。

理由としては、以下に例を挙げて説明する。
/* 悪い例 */
query := query || 'SELECT A.COMPANY'
query := query || ' FROM INVOICE A'
query := query || ' WHERE A.INVOICENO = ' || '''' || lv_invoiceno || ''''
query := query || ' AND A.DATE = ' || '''' || lv_date || '''';

OPEN lcur_invoice FOR query;

この動的SQLを見ても何が悪いかわからない。
しかし、Oracleのオプティマイザは上記SQLの「lv_invoiceno」や「lv_date」の中身が変わるたびに別のクエリとして認識してしまうため、キャッシュを圧迫してしまい消さなくて良いクエリが消されてしまう。

2014/02/15

Logicool MX-RからG700Sにかえて思った良いところ・悪いところ

LogicoolのMX-R(MX レボリューション)を7年くらい使用していた。
ホイールが壊れ、チャタリングするようになりネットサーフィンすらまともにできなくなった。

しかし、MX-Rはディスコン、Amazonではプレミアム価格で3倍以上の値が付いている。
※キーボードとセットなら廉価版MX-Rが買えるけど…


じゃぁ、次のマウスは何にすればいいの?


そんな悩めるMX-Rユーザのために、次のマウス候補を見つけるためにもG700Sとの比較&感想をまとめていく。
本当の後継機種はM950だが気にしたら負け。



2014/02/08

バッチファイルで日付(yyyymmdd)、時間(hhmiss)を取得する

 例えばバッチファイルでデータのバックアップをするとき、起動時の日時をファイル名に付与することはよくある。
以下、日付、時間を取得する方法をまとめる。


日付、時間を取得する



日付や時間を取得するときは以下のようにできる。
※ECHOはコマンドプロンプトに表示するため

ECHO %DATE%
ECHO %TIME%

しかし、このままでは「yyyy/MM/dd」や「H:mm:ss.ff」となり、フォルダ名やファイル名に指定することができない。


2014/02/01

【VBA】選択範囲の絶対参照、相対参照を相互変換する

 セル内に「=A1」、「=A1+A2」と入力したあとに、参照先はそのままでコピーして他の場所で使いたいときがある。
だがセルを相対的に参照しているため、移動した時点で参照先が変わってしまい結果がおかしくなってしまう。

解決するには、「=$A$1」、「=$A$1+$A$2」のように全て絶対参照に修正すればよい。


反対に、絶対参照で数式を入力したあとに、やっぱり相対参照がよかった。
なんてこともよくあることだ。

しかし、「=A1+A2」と「=$A$1+$A$2」を毎回手作業で修正するのは馬鹿らしい。


それを一括で行うマクロが以下になる。
※以下の例は、行・列ともに全て変換する方法だ。
   行のみ、列のみは「マクロの内容説明」を参照してほしい。