こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PL/SQLでの文字列と数値の比較について

いつもお世話になっております。
次のように、今が午前中なら「AM」と表示するPL/SQLのプログラムを考えています。

BEGIN
if TO_CHAR(SYSTIMESTAMP,'hh24')<12 THEN
DBMS_OUTPUT.PUT_LINE('AM');
END if;
END;
/

動作しているように見えるのですが、TO_CHARはVARCHAR2型を返すとマニュアルに書いてありました。TO_CHARが返す値は数値に変換したほうがよいのでしょうか。あるいはPL/SQLでも、文字列は数値に変換されるのでしょうか。
お教えいただけると助かります。
何卒よろしくお願いいたします。

投稿日時 - 2010-02-19 22:56:06

QNo.5690557

困ってます

質問者が選んだベストアンサー

 これはTO_CHARの問題ではないよね。この問題の本質は「PL/SQLで VARCHAR2(2) < NUMBER(2) という演算はどう動作するのか」という事。

 で、Oracleにおいて普通のSQLであればVARCHAR(2) < NUMBER(2)は NUMBER < NUMBER(2) に文字のほうが数値に変換されて比較されるという事を質問者の方はご存知のようなので、基本的にはPL/SQLも同様だ。まぁきっと同じエンジン使ってるよね。

 と言っても私も正確には知らないので、PL/SQLで実際に以下のようなものを書いて検証してみると良いだろう。

BEGIN
if 'AAA' < 12 THEN
DBMS_OUTPUT.PUT_LINE('AM');
END if;
END;
/

これで、「数値が無効です」というエラーが発生したら普通のSQL実行と同じで文字と数値の比較は文字の方を自動的に数値に変換していると推測できる。

投稿日時 - 2010-02-19 23:55:53

お礼

anmochi様
さっそくご回答いただき、ありがとうございました。
試してみましたら、「文字から数値への変換エラー」が発生しました
。ご指摘の通り「文字の方を自動的に数値に変換」しているようです。

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

投稿日時 - 2010-02-21 21:23:30

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)