コミュニティでの活動の履歴として、自身(Orator/魔界の仮面弁士)が掲示板・Mailing List・Newsgroup等へ発言した内容の中で、再利用できそうな物を拾い出して、掲載しています。

« 2006年04月 | Main | 2006年11月 »
[Oracle] ORA-01425 の対処方法 / 2006年08月27日(日)
LIKE 演算子にて、%を含む文字列を検索したい場合には、WHERE "FieldName" LIKE '%\%%' ESCAPE '\'のように、ESCAPE 句を使って回避しますが、ここで一つ問題が発生。

バージョン・環境の違いによるものなのかも知れませんが、当方では何故か、ORA-01425: エスケープ文字は長さ1の文字列である必要がありますという不思議なエラーが発生してしまいました。

一応、これを ESCAPE '\\' にすればエラーは消えたのですが…これだと検索がうまくいかない。
それに、各種資料を見ても、ESCAPE '\\' なんて指定している物は見当たらないので、対策が間違っているのは明らかなようです。原因は一体何だ?


いろいろと試してみた結果、どうやら、対象フィールドが NVARCHAR2 型の場合に発生するようです。
なので結論としては、ESCAPE に指定する文字を変更して、WHERE "FieldName" LIKE '%¥%%' ESCAPE ''のように、マルチバイト文字でエスケープするか、WHERE "FieldName" LIKE '%\%%' ESCAPE TO_NCHAR('\')あるいは、WHERE "FieldName" LIKE '%\%%' ESCAPE N'\'などのように指定すれば良い事がわかりました。


なるほど。よくよく考えれば、相手が (VARCHAR2 ではなく) NVARCHAR2 なのであれば、使用するリテラルも同じ型に合わせるべきというのは道理です。とするとつまり、WHERE "FieldName" LIKE N'%\%%' ESCAPE N'\'のように、LIKE部も一致させるのが最善なのでしょうね。

 
Posted at 15:51 / Oracle / この記事のURL
コメント(0)
SPAM 対策 / 2006年08月12日(土)
yaplog は、どうにもSPAM が多すぎてメンテナンスする気力も起きなかったのだけれど。

久しぶりに設定ページを見たら、いつのまにか英数字のみのコメント/トラバを拒否する機能が付いていた。
まぁ、海外ユーザからのコメントが付くとも思えないし、とりあえず設定してみるかな。


中止していた日記の投稿を、少し復活させてみて暫し様子見。
これで駄目なら、やはり某所への blog 移動を本格的に考えないといけないのだろうな。

もっとも、あっちはまだマトモに設定が完了していないのだが。

 
Posted at 20:43 / 雑記 / この記事のURL
コメント(1)
P R

Microsoft Most Valuable Professional, Visual Developer - Visual BasicMSMVP for Visual Basic


Global Media Online INC.