2006年11月アーカイブ

Windowsのシェルであるコマンドプロンプトは、UNIX系のシェルと比べると余りに貧弱ですが、先日次世代Windowsシェルである「Windows PowerShell v1.0」(以下WPS)が公開されたようです。



■ 窓の杜 - 【NEWS】MS、システム管理者向けの新コマンドシェル「Windows PowerShell」v1.0を公開

http://www.forest.impress.co.jp/article/2006/11/15/windowspowershell.html



.NETをベースとしたシェルなのですが、面白いのはコマンドレット(WPSで用意された単機能のコマンド)の結果が.NETのオブジェクトである点。

従来のシェルはコマンドの結果はテキストデータであり、それをパイプで渡して色々弄くったりしていたわけですが、WPSの場合は結果が.NETのオブジェクトで返されるので、色々と柔軟なことが出来そうです。

(コマンドレットでなく、既存のプログラムを叩いた結果(標準/エラー出力結果)はString[]となるみたいですが)



詳しいことは以下の記事が参考になります。



■ 次世代Windowsシェル「Windows PowerShell」を試す(前編) - @IT

http://www.atmarkit.co.jp/fdotnet/special/powershell01/powershell01_01.html

WindowsXPでエクスプローラでzipやcabファイルを含むフォルダを開こうとすると、ものすごく重くなるという経験のある人は多いと思います。

これは、圧縮フォルダ機能ってやつで、zipやcabファイルを透過的に使うことを可能にしている機能なんですが、毎度毎度勝手に中身を見に行ったりするので無駄に頑張りすぎます。

実際圧縮ファイルなんて手持ちのアーカイバで解凍するわけで、メリットよりもデメリットのほうが大きいように感じます。(私見)



ということで、これを無効化する方法。



regsvr32 /u zipfldr.dll

regsvr32 /u cabview.dll



で、OKです。

エクスプローラとかその他のファイラなんかも相当快適になります。



なお、元に戻したい場合は、



regsvr32 zipfldr.dll

regsvr32 cabview.dll



で元に戻せます。



Oracleで通常、部分一致で検索を行う場合、通常下記のように記述すると思います。



SELECT [column1],[column2] FROM [TABLE] WHERE [column1] LIKE '%[文字列]%';



部分一致で検索をする際に、検索文字列内に「%」、「_」等が含まれた場合にエスケープしてあげる必要があります。

"10%"という文字列の部分一致で検索をかける場合。



SELECT [column1],[column2] FROM [TABLE] WHERE [column1] LIKE '%10¥%%' ESCAPE '¥';



全て半角で検索をかける場合は問題ないのですが、

検索対象文字列内にマルチバイト文字列が含まれる場合、

下記のエラーで終了してしまうケースがあります。



【ORA-01424: エスケープ文字に続く文字がないか、または無効です。】



これはUNICODEが半角文字も2バイトで表現されているのが原因のようです。



■対処方法■

"10%"という文字列の部分一致で検索をかける場合。



SELECT [column1],[column2] FROM [TABLE] WHERE TO_NCHAR([column1]) LIKE TO_NCHAR('%10¥%%') ESCAPE TO_NCHAR('¥');



対応している型であるNVARCHARに変換してあげましょう。



■考察■

最初からDB設計時にNVARCHARを使っていけばいいのかもしれませんが、

半角も2バイト使用することを考えると、

安易になんでもかんでもNVARCHARにしてしまえというのは乱暴だと思います。

そこは扱うデータによって使い分けが必要になってくると思います。