文字リテラルと連結演算子ガイド

Oracle Master Silver

Oracleデータベースでは、文字列操作の基本となる「文字リテラル」と「連結演算子」を使用して、データの加工や表示を柔軟に行うことができます。本記事では、scottスキーマを使用して、これらの基本から応用までを包括的に解説します。


文字リテラルとは?

文字リテラルは、文字列をクエリやPL/SQLで扱う際に使用する固定の文字列です。
Oracleでは文字リテラルを シングルクォート (‘ ‘) で囲みます。

サンプルクエリ

SELECT 'Hello, Oracle!' AS greeting
FROM dual;

実行結果

greeting
Hello, Oracle!
  • ポイント: 文字リテラルを囲むシングルクォートは必須です。
  • 数値や日付リテラルとは異なり、文字列リテラルは直接文字として認識されます。

シングルクォートを含む文字リテラル

文字リテラルにシングルクォート (') を含める場合は、シングルクォートを2つ連続して記述します。

サンプルクエリ

SELECT 'It''s a beautiful day!' AS text_with_quote
FROM dual;

実行結果

text_with_quote
It’s a beautiful day!
  • ポイント: シングルクォートを2つ連続させることで、Oracleにおいて1つのシングルクォートとして認識されます。

大体引用メカニズム

Oracleでは、文字列の区切りとしてシングルクォート以外に “大体引用” (alternative quoting) として q 演算子を利用することもできます。このメカニズムを使うと、シングルクォートを多用する場合にコードがより見やすくなります。

基本構文

q'[...]'
  • [...] の部分には、任意の区切り文字を使用できます。開始文字と終了文字はペアである必要があります(例: [ ], ( ), < >, { })。

サンプルクエリ

SELECT q'[It's a beautiful day!]' AS text_with_quote
FROM dual;

実行結果

text_with_quote
It’s a beautiful day!

複雑な文字列への適用例

シングルクォートが多く含まれる文字列でも、q 演算子を使うと明瞭に記述できます。

SELECT q'<She said, "It's Oracle's best feature!">' AS complex_text
FROM dual;

実行結果

complex_text
She said, “It’s Oracle’s best feature!”

連結演算子とは?

連結演算子 (||) は、複数の文字列や列を結合して1つの文字列にする際に使用します。

例1: 固定文字列の連結

SELECT 'Hello' || ', ' || 'World!' AS concatenated_text
FROM dual;

実行結果

concatenated_text
Hello, World!

例2: 列データの連結

scottスキーマEMP表を使用して、従業員の氏名と職種を結合した例を見てみましょう。

SELECT ENAME || ' is a ' || JOB AS employee_info
FROM EMP;

実行結果(抜粋)

employee_info
SMITH is a CLERK
ALLEN is a SALESMAN
JONES is a MANAGER
  • ENAME 列(従業員名)と JOB 列(職種)を連結し、より人間が理解しやすい形式に変換しています。

例3: NULL値との連結

連結演算子を使用する際に、列値がNULLの場合の挙動を確認してみましょう。

SELECT ENAME || ' works in ' || NULL AS employee_info
FROM EMP;

実行結果(抜粋)

employee_info
SMITH
ALLEN
  • ポイント: NULLと連結された場合、結果はNULL扱いになります。

応用例: フォーマット整形

従業員名と給与を結合して、よりわかりやすい形式に整形します。

SELECT 'Employee: ' || ENAME || ', Salary: $' || TO_CHAR(SAL, '999,999') AS formatted_info
FROM EMP;

実行結果(抜粋)

formatted_info
Employee: SMITH, Salary: $ 800
Employee: ALLEN, Salary: $ 1,600
  • ポイント: TO_CHAR 関数を使用して、給与をフォーマット整形しています。

トラブルシューティング: よくあるエラー

文字リテラルや連結演算子を使用する際に発生する可能性のあるエラーについて説明します。

エラー1: シングルクォートの不一致

SELECT 'It's a mistake AS error_example
FROM dual;

発生するエラー

ORA-00923: FROMキーワードが指定の位置にありません。
  • 解決策: シングルクォートを2つ連続して記述するか、大体引用を使用します。

エラー2: NULL値の予期せぬ挙動

SELECT 'Name: ' || NULL || 'Missing' AS result
FROM dual;

実行結果

result
Name: Missing
  • 解決策: COALESCE 関数を使用してNULL値を処理します。
SELECT 'Name: ' || COALESCE(NULL, 'Unknown') || 'Missing' AS result
FROM dual;

修正版結果

result
Name: UnknownMissing

まとめ

  • 文字リテラルは固定文字列として、Oracleではシングルクォートで囲む。
  • 連結演算子 (||) を使うことで、複数の文字列や列を簡単に結合できる。
  • シングルクォートを含める場合は、シングルクォートを2つ連続させる必要がある。
  • 大体引用 (q 演算子) を使用することで、複雑な文字列をより明確に記述できる。
  • NULLと連結すると、結果がNULLになる点に注意し、COALESCE 関数で対処可能。
  • TO_CHAR を使用することで、フォーマット整形が可能。

これらを活用することで、データの表示形式を自由にカスタマイズできます。是非、scottスキーマで実際にクエリを試してみてください!

[参考]
Oracle Database SQL言語リファレンス 19c

コメント

タイトルとURLをコピーしました