Question & Answer
Question
生成列が定義されている表に対してデータを IMPORT する際の考慮点を教えてください。
Answer
当文書では自動生成される ID 列のケースと列の内容から生成される生成列のケースについて説明します。
1. ID 列の場合
a. 入力元になるデータに ID 列が定義されていない場合
インポート実行時に modified by identitymissing を指定してください。
入力データに ID 列が含まれていないものとみなして、ID 列値を生成します。
例:
入力元になる表 tab1 が
create table tab1 (c1 int,
c2 int,
c3 char(1))
インポート先となる表 tab2 が
create table tab2 (c1 int,
c2 int,
c3 int generated by default as identity,
c4 char(1))
で定義されていたとします。
tab1 の内容が以下の場合、
> db2 "select * from tab1"
C1 C2 C3
----------- ----------- --
5 10 K
1 15 T
3 8 B
3 レコードが選択されました。
> db2 "export to tab1.del of del select * from tab1"
> db2 "import from tab1.del of del modified by identitymissing replace into tab2"
> db2 "select * from tab2"
C1 C2 C3 C4
----------- ----------- ----------- --
5 10 1 K
1 15 2 T
3 8 3 B
3 レコードが選択されました。
b. 入力元の表に ID 列が定義されているが、インポート先では別の ID 列値を生成させたい場合
b-1. エクスポート時に ID 列を含めず、インポート実行時に modified by identitymissing を指定してください。
入力データに ID 列が含まれていないものとみなして、ID 列値を生成します。
例:
入力元になる表 tab1 が
create table tab2 (c1 int,
c2 int,
c3 int generated by default as identity,
c4 char(1))
インポート先となる表 tab2 が tab1 と同じ内容で定義されていたとします。
tab1 の内容が以下の場合、
> db2 "select * from tab1"
C1 C2 C3 C4
----------- ----------- ----------- --
5 10 1 K
1 15 2 T
3 8 3 B
3 レコードが選択されました。
tab2 で c4 列の順番で ID 列を生成させたい場合、エクスポート時に C4 列でソートしてください。このとき出力列に ID 列は含めません。
> db2 "export to tab1.del of del select c1, c2, c4 from tab1 order by c4"
> db2 "import from tab1.del of del modified by identitymissing replace into tab2"
> db2 "select * from tab2"
C1 C2 C3 C4
----------- ----------- ----------- --
3 8 1 B
5 10 2 K
1 15 3 T
3 レコードが選択されました。
インポートされた順序にしたがって ID 列が生成されます。
b-2. エクスポート時に ID 列を含め、インポート実行時に modified by identityignore を指定してください。
入力データに含まれる ID 列の値を無視して新たに ID 列値を生成します。
例:
tab1, tab2 の定義、tab1 表の内容は b-1 のケースと同じとします。
tab2 で c4 列の順番で ID 列を生成させたい場合、エクスポート時に C4 列でソートしてください。このとき出力列に ID 列も含めます。
> db2 "export to tab1.del of del select * from tab1 order by c4"
> db2 "import from tab1.del of del modified by identityignore replace into tab2"
> db2 "select * from tab2"
C1 C2 C3 C4
----------- ----------- ----------- --
3 8 1 B
5 10 2 K
1 15 3 T
3 レコードが選択されました。
2. 生成列の場合
a. 入力元になるデータに生成列が定義されていない場合
インポート実行時に modified by generatedmissing を指定してください。
入力データに生成列が含まれていないものとみなして、生成列値を生成します。
例:
入力元になる表 tab1 が
create table tab1 (c1 int,
c2 int,
c3 char(1))
インポート先となる表 tab2 が
create table tab2 (c1 int,
c2 int,
c3 int generated always as (c1 * 2),
c4 char(1))
で定義されていたとします。
tab1 の内容が以下の場合、
> db2 "select * from tab1"
C1 C2 C3
----------- ----------- --
5 10 K
1 15 T
3 8 B
3 レコードが選択されました。
> db2 "export to tab1.del of del select * from tab1"
> db2 "import from tab1.del of del modified by generatedmissing replace into tab2"
>db2 "select * from tab2"
C1 C2 C3 C4
----------- ----------- ----------- --
5 10 10 K
1 15 2 T
3 8 6 B
3 レコードが選択されました。
b. 入力元になる表に生成列が定義されている場合
b-1. エクスポート時に生成列を含めず、インポート実行時に modified by generatedmissing を指定してください。
入力データに生成列が含まれていないとみなして、生成列値を生成します。
例:
入力元になる表 tab1 が
create table tab2 (c1 int,
c2 int,
c3 int generated always as (c1 * 2),
c4 char(1))
インポート先となる表 tab2 が
create table tab2 (c1 int,
c2 int,
c3 int generated always as (c1 * 5),
c4 char(1))
で定義されていたとします。
tab1 の内容が以下の場合、
C:\Worktemp\faqid>db2 "select * from tab1"
C1 C2 C3 C4
----------- ----------- ----------- --
5 10 10 K
1 15 2 T
3 8 15 B
3 レコードが選択されました。
エクスポート時に出力列に生成列 (c3) を含めません。
> db2 "export to tab1.del of del select c1, c2, c4 from tab1"
> db2 "import from tab1.del of del modified by generatedmissing replace into tab2"
> db2 "select * from tab2"
C1 C2 C3 C4
----------- ----------- ----------- --
5 10 25 K
1 15 5 T
3 8 15 B
3 レコードが選択されました。
b-2. エクスポート時に生成列を含め、インポート実行時に modified by generatedignore を指定してください。
入力データに含まれる生成列の値を無視して、新たに生成列値を生成します。
例:
tab1, tab2 の定義、tab1 表の内容は b-1 のケースと同じとします。
エクスポート時に出力列に生成列 (c3) も含めます。
> db2 "export to tab1.del of del select * from tab1"
> db2 "import from tab1.del of del modified by generatedignore replace into tab2"
> db2 "select * from tab2"
C1 C2 C3 C4
----------- ----------- ----------- --
5 10 25 K
1 15 5 T
3 8 15 B
3 レコードが選択されました。
関連情報
ID 列のインポートに関する考慮事項
生成列のインポートに関する考慮事項
[Db2] パスポート・アドバンテージによく寄せられる質問
1. ID 列の場合
a. 入力元になるデータに ID 列が定義されていない場合
インポート実行時に modified by identitymissing を指定してください。
入力データに ID 列が含まれていないものとみなして、ID 列値を生成します。
例:
入力元になる表 tab1 が
create table tab1 (c1 int,
c2 int,
c3 char(1))
インポート先となる表 tab2 が
create table tab2 (c1 int,
c2 int,
c3 int generated by default as identity,
c4 char(1))
で定義されていたとします。
tab1 の内容が以下の場合、
> db2 "select * from tab1"
C1 C2 C3
----------- ----------- --
5 10 K
1 15 T
3 8 B
3 レコードが選択されました。
> db2 "export to tab1.del of del select * from tab1"
> db2 "import from tab1.del of del modified by identitymissing replace into tab2"
> db2 "select * from tab2"
C1 C2 C3 C4
----------- ----------- ----------- --
5 10 1 K
1 15 2 T
3 8 3 B
3 レコードが選択されました。
b. 入力元の表に ID 列が定義されているが、インポート先では別の ID 列値を生成させたい場合
b-1. エクスポート時に ID 列を含めず、インポート実行時に modified by identitymissing を指定してください。
入力データに ID 列が含まれていないものとみなして、ID 列値を生成します。
例:
入力元になる表 tab1 が
create table tab2 (c1 int,
c2 int,
c3 int generated by default as identity,
c4 char(1))
インポート先となる表 tab2 が tab1 と同じ内容で定義されていたとします。
tab1 の内容が以下の場合、
> db2 "select * from tab1"
C1 C2 C3 C4
----------- ----------- ----------- --
5 10 1 K
1 15 2 T
3 8 3 B
3 レコードが選択されました。
tab2 で c4 列の順番で ID 列を生成させたい場合、エクスポート時に C4 列でソートしてください。このとき出力列に ID 列は含めません。
> db2 "export to tab1.del of del select c1, c2, c4 from tab1 order by c4"
> db2 "import from tab1.del of del modified by identitymissing replace into tab2"
> db2 "select * from tab2"
C1 C2 C3 C4
----------- ----------- ----------- --
3 8 1 B
5 10 2 K
1 15 3 T
3 レコードが選択されました。
インポートされた順序にしたがって ID 列が生成されます。
b-2. エクスポート時に ID 列を含め、インポート実行時に modified by identityignore を指定してください。
入力データに含まれる ID 列の値を無視して新たに ID 列値を生成します。
例:
tab1, tab2 の定義、tab1 表の内容は b-1 のケースと同じとします。
tab2 で c4 列の順番で ID 列を生成させたい場合、エクスポート時に C4 列でソートしてください。このとき出力列に ID 列も含めます。
> db2 "export to tab1.del of del select * from tab1 order by c4"
> db2 "import from tab1.del of del modified by identityignore replace into tab2"
> db2 "select * from tab2"
C1 C2 C3 C4
----------- ----------- ----------- --
3 8 1 B
5 10 2 K
1 15 3 T
3 レコードが選択されました。
2. 生成列の場合
a. 入力元になるデータに生成列が定義されていない場合
インポート実行時に modified by generatedmissing を指定してください。
入力データに生成列が含まれていないものとみなして、生成列値を生成します。
例:
入力元になる表 tab1 が
create table tab1 (c1 int,
c2 int,
c3 char(1))
インポート先となる表 tab2 が
create table tab2 (c1 int,
c2 int,
c3 int generated always as (c1 * 2),
c4 char(1))
で定義されていたとします。
tab1 の内容が以下の場合、
> db2 "select * from tab1"
C1 C2 C3
----------- ----------- --
5 10 K
1 15 T
3 8 B
3 レコードが選択されました。
> db2 "export to tab1.del of del select * from tab1"
> db2 "import from tab1.del of del modified by generatedmissing replace into tab2"
>db2 "select * from tab2"
C1 C2 C3 C4
----------- ----------- ----------- --
5 10 10 K
1 15 2 T
3 8 6 B
3 レコードが選択されました。
b. 入力元になる表に生成列が定義されている場合
b-1. エクスポート時に生成列を含めず、インポート実行時に modified by generatedmissing を指定してください。
入力データに生成列が含まれていないとみなして、生成列値を生成します。
例:
入力元になる表 tab1 が
create table tab2 (c1 int,
c2 int,
c3 int generated always as (c1 * 2),
c4 char(1))
インポート先となる表 tab2 が
create table tab2 (c1 int,
c2 int,
c3 int generated always as (c1 * 5),
c4 char(1))
で定義されていたとします。
tab1 の内容が以下の場合、
C:\Worktemp\faqid>db2 "select * from tab1"
C1 C2 C3 C4
----------- ----------- ----------- --
5 10 10 K
1 15 2 T
3 8 15 B
3 レコードが選択されました。
エクスポート時に出力列に生成列 (c3) を含めません。
> db2 "export to tab1.del of del select c1, c2, c4 from tab1"
> db2 "import from tab1.del of del modified by generatedmissing replace into tab2"
> db2 "select * from tab2"
C1 C2 C3 C4
----------- ----------- ----------- --
5 10 25 K
1 15 5 T
3 8 15 B
3 レコードが選択されました。
b-2. エクスポート時に生成列を含め、インポート実行時に modified by generatedignore を指定してください。
入力データに含まれる生成列の値を無視して、新たに生成列値を生成します。
例:
tab1, tab2 の定義、tab1 表の内容は b-1 のケースと同じとします。
エクスポート時に出力列に生成列 (c3) も含めます。
> db2 "export to tab1.del of del select * from tab1"
> db2 "import from tab1.del of del modified by generatedignore replace into tab2"
> db2 "select * from tab2"
C1 C2 C3 C4
----------- ----------- ----------- --
5 10 25 K
1 15 5 T
3 8 15 B
3 レコードが選択されました。
関連情報
ID 列のインポートに関する考慮事項
生成列のインポートに関する考慮事項
[Db2] パスポート・アドバンテージによく寄せられる質問
[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008PlHAAU","label":"Data Movement-\u003EImport"},{"code":"a8m500000008PlJAAU","label":"Data Movement-\u003ELoad"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]
Was this topic helpful?
Document Information
Modified date:
30 August 2023
UID
swg21903492