- - PR -
HiRDBにNVLってあるのでしょうか?
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-04-05 13:32
HiRDB初心者です。
SELECTした結果がNULL、または存在するデータが無い場合は、固定の値を挿入しようと思っています。 SELECT NVL(AAA,'nodata') FROM TABLE_A マニュアルをみたのですが、NVLらしい関数を見つけられませんでした。 ご教授、お願い致します。 | ||||||||
|
投稿日時: 2006-04-05 14:09
COALESCE ってないでしょうか? Oracle の NVL と同等(+α)で ANSI準拠の関数です。 Oracleでも9i以上で使えますし、DB2、PostgreSQLや MYSQL の新しいバージョンのもの、SQL Server2005など 使えたと思います。 | ||||||||
|
投稿日時: 2006-04-05 22:38
マニュアルにあるCASE式の部分にありますよ。 | ||||||||
|
投稿日時: 2006-04-06 09:48
返信ありがとうございます。
マニュアルを見て、以下のように作って実行してみたのですが、 「NULLは入れられない」というエラーが出てしまいます・・・。 なにか間違いなどありますでしょうか? ご指摘、お願いします。 UPDATE TABLE_A A SET koumoku3 = ( SELECT COALESCE( B.koumoku3, 'nodata' ) FROM TABLE_B B WHERE A.koumoku4 = B.koumoku4 AND A.koumoku5 = B.koumoku5 AND A.koumoku6 = B.koumoku6 ) WHERE A.koumoku1 ='1' AND A.koumoku2 ='2' | ||||||||
|
投稿日時: 2006-04-06 10:18
確認させてください。 SELECT文で返される行数は必ず1行ですか? #0行のパターンがありえるのか否かが気になりました。 また、SELECT単体で実行したときはちゃんとNULLが'nodata'に置き換わっていますか? | ||||||||
|
投稿日時: 2006-04-06 10:44
SELECT文で返される行数は必ず1行ですか?
#0行のパターンがありえるのか否かが気になりました。 →0行の場合もあります。説明が足りませんでした。 取ってくるデータが無い場合、NULLが挿入されると考えていたので、この質問になっ てしまいました・・・。先ほどのエラーも該当データ無しの時に出ています。 質問自体間違ってますね^^;。 データ無しの場合にエラーを回避する方法はあるのでしょうか? 何度もすいません(シ_ _)シ。 | ||||||||
|
投稿日時: 2006-04-06 10:53
追加です。
#SELECT単体で実行したときはちゃんとNULLが'nodata'に置き換わっていますか? →データ無しの行には、桁数分の*が戻ってきました。以下のような感じです。 EXP(1) ------------- 1234567890123 ************* 以上、よろしくお願い致します。 | ||||||||
|
投稿日時: 2006-04-06 11:42
データがない場合にNULLになります。
で、NULLは駄目だよ!ってHiRDBが教えてくれているのです。 よってデータがない場合を考慮してSQLを作ってあげる必要があるのです。 一応、整理がてらまとめて見ましょう。
では、取得したB.koumoku3の値がNULLだったら'nodata'に置き換える っていう指定をしていますね。 よって、データがない場合はCOALESCEは動かないのです。 では、データがない場合はどうするか?って考えると パターンとしては 1)必ずデータがある状態にする。 2)データがない場合にCOALESCEを使うようにする という2つが大まかに考えられると思います。 1)のパターンですと、たとえばMAXやMINを用いて1件取得されるようにし、 その結果がNULLの場合を考慮してCOALESCEを使うようにする。 2)のパターンですと、たとえば外部結合して、取得された値がNULLの場合に COALESCEを使うようにする。 など、考えられます。 とりあえずデータパターンなど分からないので、 現状でさっくり考え付いた方法を挙げてみました。 #いまHiRDBv7をインストール中で、検証できていないので #100%いけると言い切れませんが、 #HiRDB特有の話ではないので、たぶん大丈夫かなぁ?と思います。 #こんな回答で申し訳ない。 =================================================================== 以下追記 =================================================================== HiRDBでちゃんと以下のようなSQLを受け付けてくれることも確認しました。
[ メッセージ編集済み 編集者: 夏椰|。σ)o 編集日時 2006-04-06 12:05 ] |