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

Oracle Master Silver

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

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?


文字リテラルとは?

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

サンプルクエリ

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

実行結果

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

GREETING
--------------
Hello, Oracle!

SQL> SELECT Hello, Oracle! AS greeting FROM dual;
SELECT Hello, Oracle! AS greeting FROM dual
*
ERROR at line 1:
ORA-00923: FROM keyword not found where expected ★エラー
  • ポイント: 文字リテラルを囲むシングルクォートは必須です。
  • 数値や日付リテラルとは異なり、文字列リテラルは直接文字として認識されます。

dual 表についてはコチラ


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

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

サンプルクエリ

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

実行結果

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

TEXT_WITH_QUOTE
---------------------
It's a beautiful day!

SQL> SELECT 'It's a beautiful day!' AS text_with_quote FROM dual;
ERROR:
ORA-01756: quoted string not properly terminated ★エラー
  • ポイント: シングルクォートを2つ連続させることで、Oracleにおいて1つのシングルクォートとして認識されます。

大体引用メカニズム

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

基本構文

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

サンプルクエリ

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

実行結果

SQL> 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;

実行結果

SQL> 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;

実行結果

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

CONCATENATED_
-------------
Hello, World!

例2: 列データの連結

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

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

実行結果

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

EMPLOYEE_INFO
-------------------------
SMITH is a CLERK
ALLEN is a SALESMAN
WARD is a SALESMAN
JONES is a MANAGER
MARTIN is a SALESMAN
BLAKE is a MANAGER
CLARK is a MANAGER
SCOTT is a ANALYST
KING is a PRESIDENT
TURNER is a SALESMAN
ADAMS is a CLERK
JAMES is a CLERK
FORD is a ANALYST
MILLER is a CLERK

14 rows selected.
  • ENAME 列(従業員名)と JOB 列(職種)を連結し、より人間が理解しやすい形式に変換しています。

SCOTTサンプルスキーマは以下を実行することでインポートおよび使用が可能です。

$ sqlplus / as sysdba
SQL> @?/rdbms/admin/utlsampl.sql
$ sqlplus scott/tiger

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?


例3: NULL値との連結

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

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

実行結果

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

EMPLOYEE_INFO
--------------------
SMITH works in
ALLEN works in
WARD works in
JONES works in
MARTIN works in
BLAKE works in
CLARK works in
SCOTT works in
KING works in
TURNER works in
ADAMS works in
JAMES works in
FORD works in
MILLER works in

14 rows selected.
  • ポイント: NULLと連結された場合、結果はNULL扱いになります。

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

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

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

実行結果

SQL> 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
Employee: WARD, Salary: $ 1,250
Employee: JONES, Salary: $ 2,975
Employee: MARTIN, Salary: $ 1,250
Employee: BLAKE, Salary: $ 2,850
Employee: CLARK, Salary: $ 2,450
Employee: SCOTT, Salary: $ 3,000
Employee: KING, Salary: $ 5,000
Employee: TURNER, Salary: $ 1,500
Employee: ADAMS, Salary: $ 1,100
Employee: JAMES, Salary: $ 950
Employee: FORD, Salary: $ 3,000
Employee: MILLER, Salary: $ 1,300

14 rows selected.
  • ポイント: TO_CHAR 関数を使用して、給与をフォーマット整形しています。

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

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

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

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

発生するエラー

SQL> SELECT 'It's a mistake AS error_example FROM dual;
SELECT 'It's a mistake AS error_example FROM dual
*
ERROR at line 1:
ORA-00923: FROM keyword not found where expected
  • 解決策: シングルクォートを2つ連続して記述するか、大体引用を使用します。

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

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

実行結果

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

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

修正版結果

SQL> 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

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

コメント

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