0

私はMYSQLプログラミングが初めてです。MYSQL ループ スクリプトを使用して、非常に大きなテーブルをいくつかの csv ファイルに出力したいと考えています。私のスクリプトは次のとおりです。

BEGIN
        SET @t_lines=0;
        SET @t_count=0;
        SET @t_filepath='/home/ab/path/table_name_02212013_';
        WHILE t_lines<=5000000
        SET @t_filename=CONCAT(@t_filepath,CAST(@t_count as CHAR));
        select * into outfile @t_filename fields terminated by ',' optionally enclosed by '"' lines terminated by '\n' from table_name limit @t_lines,@t_lines+300000;
        SET @t_lines= @t_lines+300000;
        SET @t_count= @t_count+1;
        END WHILE;
        COMMIT;
END

行で構文エラーが発生しました:

SET @t_filename=CONCAT(@t_filepath,CAST(@t_count as CHAR));

WHILE ... DO による構文エラー。迅速な返信ありがとうございます。ここで、「制限」の後の「@t_lines、@t_lines + 300000」にまだ構文エラーがあります。私はそれを理解し、行範囲を与えるために「@t_lines + 300000」を許可されていない「制限」のようです。新しい変数を与えることで修正できます:

   BEGIN
            DECLARE t_lines INT DEFAULT 0;
            DECLARE t_count INT DEFAULT 0;
            DECLARE t_endlines INT DEFAULT 300000;
            DECLARE t_linerange INT DEFAULT 300000;
            SET @t_filepath='/home/ab/path/table_name_02212013_';
            WHILE t_lines<=5000000 DO
            SET @t_filename=CONCAT(@t_filepath,CAST(@t_count as CHAR));
            select * into outfile '@t_filename' fields terminated by ',' optionally enclosed by '"' lines terminated by '\n' from table_name limit t_lines,t_endlines;
            SET t_lines= t_lines+t_linerange;
            SET t_endlines= t_endlines+t_linerange
            SET t_count= t_count+1;
            END WHILE;
            COMMIT;
    END

どうもありがとう

4

3 に答える 3

1

のfilename引数はINTO OUTFILE 、リテラル文字列である必要があります。ファイル名として変数や式を使用することはできません。

の引数LIMITは整数定数でなければなりません。パラメータプレースホルダー(?)、またはストアドプロシージャパラメータまたはローカルプロシージャ変数(宣言したもの)使用できます。ただし、セッション変数@プレフィックス付きの変数)を使用することも、式を使用することもできません

クエリをSQL文字列として作成し、値を文字列に補間する必要があります。
次に、そのSQL文字列をPREPAREEXECUTEで使用します。

于 2013-02-21T16:13:03.400 に答える
1

MySQL のループ構文にWHILEDOは;が必要です。

WHILE t_lines<=5000000 DO
...
END WHILE;
于 2013-02-21T13:58:28.580 に答える
0

試す :

convert(columnName, char)

-->

BEGIN
        SET @t_lines=0;
        SET @t_count=0;
        SET @t_filepath='/home/ab/path/table_name_02212013_';
        WHILE t_lines<=5000000
        SET @t_filename=CONCAT(@t_filepath,convert(@t_count, CHAR));
        select * into outfile @t_filename fields terminated by ',' optionally enclosed by '"' lines terminated by '\n' from table_name limit @t_lines,@t_lines+300000;
        SET @t_lines= @t_lines+300000;
        SET @t_count= @t_count+1;
        END WHILE;
        COMMIT;
END
于 2013-02-21T13:59:17.523 に答える