リテラル(コンスタント値)
リテラルとは定数値であり、コンスタントとも呼ばれることもある。
しかし、正確にはリテラルはコンスタント値(constant value)をあらわす。
リテラル値 NULL という表現は、コンスタント値の値 NULL になってしまいますので、納品物などには注意が必要です。
⇒ 日時・日付・期間 リテラル
文字リテラル
文字リテラルでは、単一引用符(') で囲む必要がある。※ 二重引用符(")で囲まれたものはオブジェクト名として取り扱われるので使用することはできない。
文字リテラルに限ったことではないが、最大長は 4000 文字である。
4000 文字を超えると ORA-01704: 文字列リテラルが長すぎます エラーが発生する。
データベースキャラクタセットの文字リテラル
文字列 Abc 、あいうえお、123
'Abc' 'あいうえお' '123'
各国語キャラクタセットの文字リテラル
NCHAR および NVARCHAR2 の文字列 Abc 、あいうえお、123
n'Abc' n'あいうえお' N'123'
先頭に nをつける。(n でも N でもよい)
q'<代替引用符>の使い方、単一引用符の表現方法
単一引用符をあらわすには、単一引用符を 2 つ連続して記述するか、引用符の定義を変更する。
文字列 Steven's (引用符を 2つ連続して記述)
'Steven''s'
引用符の定義を変更する。(引用符はシングルバイト文字のみ代替可能)
q'<代替引用符>....文字列....<代替引用符>' 形式で使用する。(q は Qでも可)
引用符を '#' で定義した例
q'#Steven's#'
引用符に括弧に({ [ < () をする例 必ず対となる閉じ括弧で終了する。
q'{Steven's}' q'<Steven's>'
q'[Steven's]' q'(Steven's)'
各国語キャラクタセットの文字リテラルとの併用は
nq'{Steven's}'
と先に n を記述する。
改行コード
多くの開発言語では改行をあらわす記号 '\r' や '\n' などがある。しかし、SQL や PL/SQL にはない。
代わりに CHR 関数を使用する。
CHR(13) ... キャリッジリターン( CR )
CHR(10) ... ラインフィード( LF )
改行が CR+LF か LF のみかは OS によって異なるので注意が必要。
Windows 系 : CR + LF
UNIX 系 : LF のみ
文字列リテラルの同士比較の不思議
文字列リテラル同士の比較は 空白埋め比較セマンティクス になる。
そのため 'ABC' と 'ABC___' は等価になる。 (_ は半角スペース)
SELECT '''ABC'' と ''ABC '' は同じです' COMPARISON
FROM DUAL
WHERE 'ABC'='ABC '
数値リテラル
数値リテラルには整数、小数、および科学表記、浮動小数点といった特別な表記がある。
整数および小数のリテラル
整数および小数のリテラル
1 +7 -5 1.1 .471
科学表記のリテラル
科学表記(指数表記)のリテラル
1.0e23 = 1 * 10^23
1.0e+23 = 1 * 10^23
4.5678E-130 = 4.5678 * 10^(-130)
指数部は e でも E でもよく、範囲は e-130 〜 e125 までが有効
浮動小数点のリテラル
浮動小数点のリテラル
数値の末尾に F(FLOAT、BINARY_FLOAT)、または D(BINARY_DOUBLE) をつける。(小文字でも良い)
1.3F 77f
10.5D 0.0001d
リテラルとして正しく解釈しないサードパーティのアプリケーションもある。
非数値(NAN)
BINARY_FLOAT_NAN = TO_BINARY_FLOAT('NAN')
BINARY_DOUBLE_NAN = TO_BINARY_DOUBLE('NAN')
NAN と NULL は似ているが NULL と異なり以下の双方とも有効
SELECT d FROM tablename WHERE d = BINARY_DOUBLE_NAN ;
SELECT d FROM tablename WHERE d IS NAN ;
無限大(+INF)/マイナス無限大(-INF)
BINARY_FLOAT_INFINITY = TO_BINARY_FLOAT('INF')
BINARY_DOUBLE_INFINITY = TO_BINARY_DOUBLE('INF')
-BINARY_FLOAT_INFINITY = TO_BINARY_FLOAT('-INF')
-BINARY_DOUBLE_INFINITY = TO_BINARY_DOUBLE('-INF')
⇒ TO_BINARY_DOUBLE、TO_BINARY_FLOAT