2

データベースからテキスト フィールドを抽出し、それを他のデータベースに挿入したいと考えています。したがって、抽出中に、テストの選択中に REPLACE(message_text,'\'', '"') を使用しました。エラーが発生しました。select ステートメントからそれを変更し、グローバル変数の初期化中にそれを実行しました。etl.globals[ 'メッセージ_テキスト'] = メッセージ_テキスト;

まだ挿入ステートメントでエラーが発生しています

insert into lcs_al_user_likes(user_id,liked_user_id,post_content,loop_id) values('${etl.globals['posted_by']}','${etl.globals['liked_user_id']}','${etl.gl‌​obals['message_text']}',?batchLoopCounter); 

言って

*SQL 構文にエラーがあります。1 行目の 'message_text']}')' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください*

グローバル変数を取得していないと思います。ログを使用してその値を出力すると、

${etl.globals['message_text']}

出力として。だからここで私を助けてください。

<query connection-id="lcsDBConnection"> 
     SELECT forum_topic_post_id AS forum_topic_post_id, posted_by AS posted_by,message_text as message_text FROM lcs_tbl_forum_topic_post WHERE like_count>0 LIMIT ?batchSize OFFSET ?queryCounter ; 
     <script connection-id="jexl"> 
         etl.globals['forum_topic_post_id'] = forum_topic_post_id; 
         etl.globals['posted_by'] = posted_by; 
         etl.globals['message_text'] = message_text.replace('\'', '"'); 
     </script> 
4

1 に答える 1

0

問題は INSERT ステートメントにあるようです。プリペアド ステートメント パラメーターのエスケープを使用する必要があります。

INSERT INTO lcs_al_user_likes(user_id,liked_user_id,post_content,loop_id) values(?{etl.globals['posted_by']},?{etl.globals['liked_user_id']},?{etl.gl‌​obals['message_text']},?batchLoopCounter); 

ところで、私が理解しているように、元の問題は挿入ステートメントを壊す引用符だったので、この場合 ?{parameter} 構文では replace(...) 関数を使用する必要はまったくありません。

于 2012-11-12T16:08:21.983 に答える