ややこしい質問なので、順を追って説明いたします。
現在、アップロードされたファイルを読んで、そのファイルのファイル名や転送番号をテーブルに入れる処理をしています。
続いて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();
この時、上記で作成したShellからCSV出力する上記ソースのMYSQLに接続するのですが、CSV出力したときに、001_~999_までの連番をCSV出力したときに(転送番号2のものだけに)一緒にMYSQLからShellに返したいです。
テーブルイメージ
|テーブルに無し| ファイル名 | 転送番号|path|
| 001_ |sample1 | 2 |conect/file1 |
| 002_ | sample2 | 2 | conect/file2 |
| 003_ |sample3 | 2 |conect/file3 |
|転番3なので払いださない|sample4| 3 |conect/file4 |
| 004_ |sample5 | 2 |conect/file5 |
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
|その下999_まで | sample999| 2 |conect/file999|
このようにテーブルには001_など入れるカラムはないのですが、
csv出力したときに一緒にmysqlからShellに001_~999_戻り値を出したいです。
一応ソースのtestproc(out param int(3) zerofill)みたいなやりかたであっているのでしょうか?
分かりずらいかもしれませんがよろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/09/16 22:30