SPSS(統計プログラム)からローカルのmysqlデータベースにデータをエクスポートしようとしています。何らかの理由で、「列数が値数と一致しません」というメッセージが表示されます。SQLステートメントの何かが間違っているときにそのエラーが発生することに慣れています。しかし、さまざまな設定で何時間もテストした後、それが問題ではないことは明らかです。
SPSS構文はSQLにあります。動作する構文は、たとえば次のとおりです。
SAVE TRANSLATE /TYPE=ODBC
/CONNECT='DSN=localhost;UID=root;PWD=!S%E&u#k;'
/ENCRYPTED
/MISSING=IGNORE
/SQL='CREATE TABLE test1 (jaar double , maand double , dag double , huishoud double , persoon double , verpl double , rit double )'
/REPLACE
/TABLE='SPSS_TEMP_2'
/KEEP=jaar, maand, dag, huishoud, persoon, verpl, rit
/SQL='INSERT INTO test1 (jaar, maand, dag, huishoud, persoon, verpl, rit) SELECT jaar, maand, dag, huishoud, persoon, verpl, rit FROM SPSS_TEMP_2'
/SQL='DROP TABLE SPSS_TEMP_2'.
このコマンドを実行すると、mysqlデータベースは次のようになります。
CREATE TABLE `test1` (
`jaar` double DEFAULT NULL,
`maand` double DEFAULT NULL,
`dag` double DEFAULT NULL,
`huishoud` double DEFAULT NULL,
`persoon` double DEFAULT NULL,
`verpl` double DEFAULT NULL,
`rit` double DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
次のデータを使用します。
INSERT INTO `test1` (`jaar`, `maand`, `dag`, `huishoud`, `persoon`, `verpl`, `rit`) VALUES
(2005, 1, 3, 1, 1, 1, 1),
(2005, 1, 3, 0, 0, 1, 1),
(2005, 1, 3, 1, 1, 1, 1),
(2005, 1, 3, 0, 0, 1, 1),
(2005, 1, 3, 0, 0, 1, 1),
(2005, 1, 3, 0, 0, 1, 1),
(2005, 1, 3, 0, 1, 1, 1),
(2005, 1, 3, 0, 0, 1, 1),
(2005, 1, 3, 0, 0, 1, 1),
(2005, 1, 3, 0, 0, 1, 1);
ここまでは順調ですね。ただし、完全なデータセットには129個の変数(SQLフィールド)が付属しています。エラーが発生する最初のものは「ritid」と呼ばれます。他の人と一緒に挿入されると、完全なプロセスを停止します。しかし、単独で挿入しても壊れます。テーブルを作成しますが、データはありません。以下に見られるように。このタイプのエラーが表示されるのは不思議ではありません。誰かアドバイスをしてもらえますか?
SAVE TRANSLATE /TYPE=ODBC
/CONNECT='DSN=localhost;UID=root;PWD=!l*z%J,[;'
/ENCRYPTED
/MISSING=IGNORE
/SQL='CREATE TABLE Test2 (ritid double )'
/REPLACE
/TABLE='SPSS_TEMP_2'
/KEEP=ritid
/SQL='INSERT INTO Test2 (ritid) SELECT ritid FROM SPSS_TEMP_2'
/SQL='DROP TABLE SPSS_TEMP_2'.
>Error # 6491. Text: Case #1 has been dropped
>Insert record failed
>Execution of this command stops.
>[Actual][MySQL] Column count doesn't match value count at row 1
>Error # 6487
>Write request failed - couldn't write any data.
mysql DB:
CREATE TABLE `Test2` (
`ritid` double DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
(前に述べたように、これにはデータがありません)
編集:「dropSPSS_TEMP_2」コマンドをスキップすると、SPSS_TEMP_2データベースはTest2データベースとまったく同じになります。