- PR -

CLOB型に対するSQL条件

投稿者投稿内容
7年目
常連さん
会議室デビュー日: 2005/04/28
投稿数: 21
投稿日時: 2008-10-14 14:09
初歩的な質問ですが、よろしくお願いいたします。

あるテーブル「AAA」にCLOB型の列があります。
仮に「CMT」という列名とします。

このCMTに対して完全一致検索したいのですが、
SELECT count(*) FROM AAA WHERE CMT = [条件文字列]
だとエラーになるので、

1: SELECT count(*) FROM AAA
2: WHERE DBMS_LOB.INSTR(CMT,[条件文字列],1,1) = 1
3: AND DBMS_LOB.GETLENGTH(CMT) = LENGTH([条件文字列]);

(3は保険のようなものでしょうか?)

としました。これだとOKなのですが、
[条件文字列]がvarchar(2)の限界値(4000byte?)を超えるとエラーになります。

通常ではありえないかもしれませんが、
CLOB列に対して完全一致検索する方法はありますでしょうか?

記載内容が乏しければスイマセン。。。。
deanna
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 118
投稿日時: 2008-10-14 14:47
DBはOracleでしょうか?
to_clob()関数を使えばいいのでは。
しかし、clobを完全一致とは。
7年目
常連さん
会議室デビュー日: 2005/04/28
投稿数: 21
投稿日時: 2008-10-14 15:00
ご返答ありがとうございます。

>しかし、clobを完全一致とは。
はい。。。ごもっともです。。。

>DBはOracleでしょうか?
言葉足らずでした。そうですOracle10gです。
C#からこのSQLを実行しようとしています。

>to_clob()関数を使えばいいのでは。

この使用方法について教えてください。

C#でSQL文字列を作成し、実行しようと思っています。

[CMT]がCLOB型です。
1: SELECT count(*) FROM AAA
2: WHERE CMT = TO_CLOB([条件文字列])
を実行したのですがSQLエラーとなりました。

他のページを見ると、
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=24654&forum=7&5
パラメータ渡しで更新をされている方がいらっしゃるので、
同様にSQLの条件もパラメータ渡しであれば可能かなと思っております。

が、可能であればSQL文字列で実現したいと考えております。

よろしくお願いいたします。




deanna
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 118
投稿日時: 2008-10-14 15:06
to_clov()はOracleの関数なのでOracleのSQLリファレンスを参照してください。
C#での記述はよくわかりません。
パラメタで指定もできるはずです。
SQLエラーの詳細は?
7年目
常連さん
会議室デビュー日: 2005/04/28
投稿数: 21
投稿日時: 2008-10-14 15:29
たびたび恐れ入ります。

リファレンスやネットを参照しましたが、まだまだ探しきれていない状態です。
が、「DBMS_LOB.INSTR(CMT, [条件文字列], 1, 1)=1」を使用する記述ばかりです。


以下、SQLPlusで実行しました。

1: SELECT count(*) FROM AAA
2: WHERE CMT = TO_CLOB([条件文字列])

・[条件文字列]の長さが短いとエラーにはなりません。
 ⇒OK
・[条件文字列]の長さが長い(4000byte以上?)になると、 
 ⇒ORA-01704 文字列リテラルが長すぎます。

1: SELECT count(*) FROM AAA
2: WHERE DBMS_LOB.INSTR(CMT, [条件文字列], 1, 1) = 1

・[条件文字列]の長さが短いとエラーにはなりません。
 ⇒OK
・[条件文字列]の長さが長い(4000byte以上?)になると、 
 ⇒ORA-01704 文字列リテラルが長すぎます。

よろしくお願いします。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2008-10-14 15:46
TO_CLOB で検索したところ、これが見つかりましたが、参照されてますか?
http://www.shift-the-oracle.com/oerrs/ora-01704.html

「TO_CLOB 関数が使用できるのは Oracle 9i 以降」とあって、バージョンが書かれていなかったのでちょっと心配でしたが、使えているようなので大丈夫みたいですね。

# 本当は「初心者」という名前の場合は回答しないつもり
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
7年目
常連さん
会議室デビュー日: 2005/04/28
投稿数: 21
投稿日時: 2008-10-14 16:06
deanna様、ぽぴ王子、ご返答ありがとうございました。

>TO_CLOB で検索したところ、これが見つかりましたが、参照されてますか?
されていませんでした。勉強になりました。


SQL単一では実装せずにパラメータを使用して実施したいと思います。

ありがとうございました!

初心者脱出できるようがんばります。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2008-10-14 17:09
完全一致で探したいというなら、格納時にデータのハッシュを一緒に格納しておいて、そいつで比較した方がいい気がする。
_________________
かるあ のメモスニペット

スキルアップ/キャリアアップ(JOB@IT)