ややこしい質問なので、順を追って説明いたします。
現在、アップロードされたファイルを読んで、そのファイルのファイル名や転送番号をテーブルに入れる処理をしています。
続いてMYSQLworkbenchにストアドプロシージャを作って、ShellでそのMYSQLに接続します。
そのときファイルの転送番号が1から2に変わったとき別パスにコピーを実行します。
conect/sample→conect/file1に変えてコピー
ここまではShellで作成できました。
続いてなのですが、今度はMYSQLプロシージャでの作成ですが転送番号2に変わったカラムの中のものを今度はCSVに出力して、そのあと2から3に変更します。
ソース
DELIMITER $$
DROP PROCEDURE IF EXISTS testproc1$$
CREATE PROCEDURE testproc1(OUT param int(3) zerofill)
BEGIN
DECLARE done INT;
DECLARE CONTINUE HANDLER FOR SQLSTATE '21000' SET done = 1;
SET param = 001;
SET @num=(SELECT table1 FROM colum1);
SET @path=(select nm3 from system where Key2 = 2);
IF @num=2 THEN
SET @query = CONCAT('SELECT * FROM table1 INTO OUTFILE ',"'", @path ,"'",' FIELDS TERMINATED BY ","');
PREPARE getExtends FROM @query;
EXECUTE getExtends;
DEALLOCATE PREPARE getExtends;
SET SQL_SAFE_UPDATES = 0;
update table1 set colum1=3 where colum1=2;
END IF;
select * from table1;
END$$
DELIMITER ;
ソース2
call testproc1();
これだとSET @num=(SELECT table1 FROM colum1);のとこでサブクエリエラーが出てしまいます。
全部のカラムのレコードを代入しようとすると変数は一つのレコードしか代入できません。ということになってしまいます。
ただこれだと一つの転送番号2しかcsvレコード出力できず、一つのレコードしか2から3に変更できません。
なので、上からレコードを読んで上から全部の2比較する条件分岐をしたいです。
テーブルイメージ
|id| ファイル名 | 転送番号|path|
| 1 |sample1 | 2 |conect/file1 |
| 2 | sample2 | 1 | conect/file2 |
| 3|sample3 | 2 |conect/file3 |
| 4 | sample4 | 3 |conect/file4 |
| 5|sample5 | 2 |conect/file5 |
・・条件分岐してまたは(カーソル、ハンドラ?)で ↓
|id| ファイル名 | 転送番号|path|
| 1 |sample1 | 3 |conect/file1 |
| 2 | sample2 | 1 | conect/file2 |
| 3|sample3 | 3 |conect/file3 |
| 4 | sample4 | 3 |conect/file4 |
| 5|sample5 | 3 |conect/file5 |
と転送番号2のときcsvにレコードを上からcsv出力して2を3に変更したいです。
上記のソースだとサブクエリエラーになってしまうため、分かるかたいたらよろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー