どう説明したら良いのか・・。
表題の件、何を言っているのかわからないと思いますが、また同じ説明をするかもしれませんが、db2のシステムテーブル(syscat.columns)を利用して、MySQLに合わせた、csv形式に変換をかける、「db2のエクスポートSQL」を生成するSQLですw
EXPORT TO .\exportsql\_tabschema_._tabname_.sql OF DEL
MODIFIED BY NOCHARDEL
VALUES
('EXPORT TO .\csv\_tabschema_._tabname_.csv OF DEL MODIFIED BY codepage=1208 SELECT ')
UNION ALL
SELECT
RTRIM(Z.STRCOL) AS S_COLUMNS
FROM
(
SELECT
CASE
WHEN X.NULLS='Y' AND X.TYPENAME <> 'VARCHAR'
THEN
X.COLNAME WHEN X.NULLS='Y' AND X.TYPENAME = 'VARCHAR' THEN 'COALESCE(' || X.COLNAME || ', ''\N'')'
ELSE
X.COLNAME
END ||
CASE
WHEN Y.MAX_COLNO=X.COLNO
THEN
' FROM _tabschema_._tabname_ ; '
ELSE
' ,'
END AS STRCOL
FROM
(
SELECT
TABSCHEMA,
TABNAME,
COLNO,
COLNAME,
TYPENAME,
NULLS
FROM
SYSCAT.COLUMNS
WHERE
TABSCHEMA = '_tabschema_' AND
TABNAME = '_tabname_'
) X ,
(
SELECT
TABSCHEMA,
TABNAME,
MAX(COLNO) AS MAX_COLNO
FROM
SYSCAT.COLUMNS
WHERE
TABSCHEMA = '_tabschema_' AND
TABNAME = '_tabname_'
GROUP BY
TABSCHEMA,
TABNAME
) Y
ORDER BY X.COLNO
) Z
;
・・・で結果はどうなるのか?
こんなかんじになったりします。
EXPORT TO .\csv\SCHEMA.AA.csv OF DEL MODIFIED BY codepage=1208 SELECT
SEQ_ID ,
COLAAAAA ,
COALESCE(GENRE, '\N') FROM SCHEMA.AA ;
- syscat.columns から、カラム名を、設定された順番どおりに取得する。
- DB2上のNULLはNULLなのですが、MySQL上のNULLは、\n なのでそれに変換する
- CSVの文字コードを強制的に、utf-8(1208)に変換する
とまあ、これだけの話です。。。
DB2のデータを、MySQLに移行するときに大活躍しました。
・・で生成したSQLをさらに流すと、MySQL用のCSVファイルが完成する!
こんなデータになるわけです
893,11,"GGG"
894,11,"HHH"
1,1,"aaa'"
2,0,"test2"
3,1,"foo\"
4,1,"\N"
5,1,"NULL"
6,1,"\\n"
7,1,"""DBL"""
100,0,"test"
101,0,"testtest"
102,0,"日本語テスト"