連結演算子

連結演算子は、文字列およびCLOBデータを操作する場合に使用します。表4-4は、連結演算子を示しています。

表4-4 連結演算子

演算子 目的

||

文字列およびCLOBデータを連結します。

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-4に示すとおり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