1

複数値挿入の例 - 手動では機能しますが、mySQL ストアド プロシージャでは機能しません。

INSERT INTO input_data1(mobile) VALUES (9619825525),(9619825255),(9324198256),(9013000002),(9999999450),(9999999876) ;

以下のプロシージャの「str」ワードの近くで構文エラーが発生しています。プロシージャでこの複数値の INSERT 作業を実装する方法を教えてもらえますか?

DELIMITER |
DROP PROCEDURE IF EXISTS mobile_series1;
CREATE PROCEDURE mobile_series1(IN str text)  
    LANGUAGE SQL     READS SQL DATA  
    BEGIN    
         DROP TABLE IF EXISTS input_data1 ;  
         CREATE TEMPORARY TABLE input_data1 (mobile varchar(1000)) engine=memory;
         INSERT INTO input_data1(mobile) VALUES str;

    END |
DELIMITER ;

前もって感謝します。

4

1 に答える 1

0

私はMySQLサーバーを持っていないので、おそらく構文エラーと+1エラーがあります(つまり、リストの最後の項目をキャプチャしていない、最初の項目を過ぎて進まないなど、コードに+1を入れることで問題が修正されている)、しかし、基本的には、INSERT ステートメントをこれに置き換えたいと考えています。

DECLARE INT _CURSOR 0;
DECLARE INT _TOKENLENGTH 0;
DECLARE VARCHAR _TOKEN NULL;

SELECT LOCATE(str, ",", _CURSOR) - _CURSOR INTO _TOKENLENGTH;

LOOP

    IF _TOKENLENGTH <= 0 THEN
        SELECT RIGHT(str, _CURSOR) INTO _TOKEN;
        INSERT INTO input_data1(mobile) VALUE _TOKEN;
        LEAVE;
    END IF;

    SELECT SUBSTRING(str, _CURSOR, _TOKENLENGTH) INTO _TOKEN;

    INSERT INTO input_data1(mobile) VALUE _TOKEN;

    SELECT _CURSOR + _TOKENLENGTH + 1 INTO _CURSOR;

    SELECT LOCATE(str, ",", _CURSOR + 1) - _CURSOR INTO _TOKENLENGTH;

END LOOP;

関数呼び出しは次のようになります

EXEC mobile_series1('9619825525,9619825255,9324198256')
于 2012-09-04T13:24:07.860 に答える