Question & Answer
Question
定義が異なる表にデータ・コピーをする方法を教えてください。
Cause
表の定義が同一の場合には [Db2] 表をコピーする方法 で案内されている方法が有効です。
コピー元とコピー先の表定義が異なる場合、CURSOR LOAD でコピー先の表定義と互換性のあるカーソルを宣言してコピーできます。
コピー元とコピー先の表定義が異なる場合、CURSOR LOAD でコピー先の表定義と互換性のあるカーソルを宣言してコピーできます。
Answer
コピー先の方が列数が多い場合、元表に存在しない列には NULL を指定したカーソルを宣言します。
例:定義の異なる ORGTAB 表から TGTTAB 表に、共通の EMPNO 列および DEPTNO 列のデータをコピーする場合
$ db2 describe table ORGTAB
Data type Column
Column name schema Data type name Length Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
EMPNO SYSIBM INTEGER 4 0 Yes
DEPTNO SYSIBM INTEGER 4 0 Yes
2 record(s) selected.
$ db2 describe table TGTTAB
Data type Column
Column name schema Data type name Length Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
EMPNO SYSIBM INTEGER 4 0 Yes
NAME SYSIBM CHARACTER 10 0 Yes
DEPTNO SYSIBM INTEGER 4 0 Yes
PHONENO SYSIBM INTEGER 4 0 Yes
4 record(s) selected.
コピーの実行例:
- コピー先の表にしかない列に対しては NULL を指定したカーソルを宣言します。
db2 "declare cr cursor for select EMPNO, cast(null as char), DEPTNO, cast(null as int) from ORGTAB"
- 宣言したカーソルをソースにコピー先へ LOAD を実行します。
db2 "load from cr of cursor replace into TGTTAB"
コピーの結果:
カーソル LOAD 前の状態
$ db2 "select * from ORGTAB"
EMPNO DEPTNO
----------- -----------
1 111
2 222
3 333
3 record(s) selected.
$ db2 "select * from TGTTAB"
EMPNO NAME DEPTNO PHONENO
----------- ---------- ----------- -----------
0 record(s) selected.
カーソル LOAD 後の状態
$ db2 "select * from TGTTAB"
EMPNO NAME DEPTNO PHONENO
----------- ---------- ----------- -----------
1 - 111 -
2 - 222 -
3 - 333 -
3 record(s) selected.
運用上の考慮点
- DECLARE CURSOR で宣言する照会の列タイプとコピー先の表の列タイプは互換性がなければなりません、ただし同一である必要はありません。
[{"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":"a8m500000008PlYAAU","label":"Database Objects-\u003ETables"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]
Was this topic helpful?
Document Information
Modified date:
15 August 2023
UID
ibm17006491