連結演算子は、文字列およびCLOBデータを操作する場合に使用します。表4-3に、連結演算子を示します。
表4-3 連結演算子
| 演算子 | 用途 | 例 |
|---|---|---|
|
|| |
文字列および |
SELECT 'Name is ' || last_name FROM employees ORDER BY last_name; |
2つの文字列を連結した結果は別の文字列になります。両方の文字列がCHARデータ型の場合、結果はCHARデータ型の文字列になり、その最大文字数は2000です。両方の文字列のデータ型がVARCHAR2の場合、その結果のデータ型はVARCHAR2になります。このデータ型は、初期化パラメータがMAX_STRING_SIZE = EXTENDEDの場合は32,767文字に制限され、MAX_STRING_SIZE = STANDARDの場合は4,000文字に制限されます。詳細は、「拡張データ型」を参照してください。どちらかの引数がCLOBデータ型の場合、結果は、一時CLOBになります。データ型が文字列型かCLOB型かにかかわらず、後続空白は連結後も文字列に残ります。
多くのプラットフォームでは、連結演算子は、表4-3に示すとおり2本の実線垂直バーで表されます。ただし、IBM社のプラットフォームの中には、この演算子として破線垂直バーを使用するものもあります。異なるキャラクタ・セットを持つシステム間(たとえばASCIIとEBCDIC間)でSQLスクリプト・ファイルを移動する場合、垂直バーが、移動先のOracle Database環境で必要な垂直バーに変換されない場合があります。オペレーティング・システムまたはネットワーク・ユーティリティによる変換の制御が困難または不可能である場合に備えて、Oracleでは、垂直バー演算子にかわるものとしてCONCAT文字ファンクションが提供されています。異なるキャラクタ・セットを持つ環境間でアプリケーションを移動する場合は、この文字ファンクションを使用することをお薦めします。
Oracleは、長さが0(ゼロ)の文字列をNULLとして処理しますが、長さが0(ゼロ)の文字列を別のオペランドと連結すると、その結果は常にもう一方のオペランドになります。結果がNULLになるのは、2つのNULL文字列を連結したときのみです。ただし、この処理はOracle Databaseの今後のバージョンでも継続されるとはかぎりません。NULLになる可能性がある式を連結する場合は、NVLファンクションを使用して、その式を長さが0(ゼロ)の文字列に明示的に変換してください。
連結の例 次の例では、CHAR列およびVARCHAR2列を持つ表を作成し、後続空白のある値とない値を挿入してから、これらの値を選択し、連結します。なお、CHAR列およびVARCHAR2列では、ともに後続空白が保存されます。
CREATE TABLE tab1 (col1 VARCHAR2(6), col2 CHAR(6),
col3 VARCHAR2(6), col4 CHAR(6));
INSERT INTO tab1 (col1, col2, col3, col4)
VALUES ('abc', 'def ', 'ghi ', 'jkl');
SELECT col1 || col2 || col3 || col4 "Concatenation"
FROM tab1;
Concatenation
------------------------
abcdef ghi jkl