0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Oracle SQL*Loader にてバイト区切り(position 利用時)における末尾の全角スペースの取り扱いに関する仕様

Last updated at Posted at 2024-02-13

概要

Oracle SQL*Loader にてバイト区切り(position 利用時)において、末尾の全角スペースが含まれている場合には全角スペースもTRIM されるようです。

以下がソースファイルと SQL*Loader の実験後のテーブルの出力結果ですが、全角スペース()が消えていることが確認できます。

< ソースファイル >

image.png

< Oracle Databaseのテーブルのデータ >

image.png

全角スペースが含まれているかを確認するクエリを実行しましたが、含まれていないことが確認できました。

image.png

has_fullwidth_space 列では次のような処理をしています。

このSQLクエリは、space_testテーブルからIDとNAMEを選択し、さらにNAMEカラムに全角スペースが含まれているかどうかを判定しています。

CASE WHEN instr(NAME, ' ') > 0 THEN 'Yes' ELSE 'No' END AS has_fullwidth_spaceの部分がその判定を行っています。

instr(NAME, ' ')は、NAMEカラムの値に全角スペースが含まれている位置を返します。全角スペースが含まれていない場合、この関数は0を返します。

したがって、instr(NAME, ' ') > 0は、NAMEカラムの値に全角スペースが含まれている場合に真(true)を返します。

CASE WHEN句は、その条件が真である場合(つまり、NAMEカラムに全角スペースが含まれている場合)に'Yes'を返し、偽である場合(つまり、NAMEカラムに全角スペースが含まれていない場合)に'No'を返します。

この結果は、has_fullwidth_spaceという名前の新しいカラムとして出力されます。

image.png

Oracle Database の文字コードは、JA16SJISTILDEで検証しています。

image.png

以上の結果から、Oracle SQL*Loader にてバイト区切り(position 利用時)において、末尾の全角スペースが TRIM されると解釈しました。

検証手順

1. データファイルの準備

次のデータをもつファイルを、/home/oracle/char_test/text.txtに作成

1 ABC       
2 あいう   
3 abc     

2. 制御ファイルの準備

SQL*Loader の制御ファイルを、/home/oracle/char_test/test.ctlに作成

-- char_test/test.ctl
LOAD DATA
CHARACTERSET JA16SJIS
INFILE '/home/oracle/char_test/text.txt'
TRUNCATE
INTO TABLE space_test
FIELDS TERMINATED BY ','
(
    ID position(1:2) CHAR,
    NAME position(3:12) CHAR
)

3. テーブルの作成

/*
DROP TABLE space_test;
*/
CREATE TABLE space_test (
    id   CHAR(2),
    name CHAR(10)
)
;

image.png

4. SQL*Loader の実行

sqlldr username/password@database control=char_test/test.ctl log=char_test/test.log

image.png

5. 実行結果を確認

SELECT
    ID,
    NAME,
    CASE WHEN instr(NAME, ' ') > 0
        THEN 'Yes'
        ELSE 'No'
    END AS has_fullwidth_space
    FROM space_test
;
ID NAME has_fullwidth_space
1 ABC No
2 あいう No
3 abc No

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?