2
私は16個のPREPARE、EXECUTE、DEALLOCATE文を(ストアドプロシージャの中で)、それぞれ異なるテーブル(テーブル1〜テーブル16)に挿入しています。例:mysql PREPARE文
SET @Command1 = CONCAT("insert into TABLE1" , ...etc..);
PREPARE stmt1 FROM @Command1 ;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
SET @Command1 = CONCAT("insert into TABLE2" , ...etc..);
PREPARE stmt1 FROM @Command1 ;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
.
.
.
SET @Command1 = CONCAT("insert into TABLE16" , ...etc..);
PREPARE stmt1 FROM @Command1 ;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
私がストアドプロシージャを実行すると、INSERTは断続的に動作します。 16枚のインサートがすべて動作することもありますが、そうでない場合もあります。ストアドプロシージャの最後の呼び出しで
、(TABLE1とTABLE2に)第2のインサートと最後の4つのインサート(表13〜16)動作ではなく、表3にインサート12に
なぜ説明できますか?私は同じ変数/ハンドルcommand1とstmt1を使用しているためにすることはできません? 、Prepare
とExecute
コマンドの組み合わせがプレースホルダして使用する必要がありますMySQLで
を(http://tinyurl.com/so-hints)。生成されたステートメント(別のテーブルに挿入することによってステートメントを記録できます)をポストし、ストアドプロシージャが呼び出されたときに警告またはエラーが発生したかどうかを確認します。また、なぜパラメータではなく 'CONCAT'を使用していますか(' EXECUTE ... USING ... ')? – outis
ストアドプロシージャ内では、 'SELECT @ Command1'のようにSELECTを使用してステートメントを単に印刷できます。他のテーブルをINSERT INTOする必要はありません。 Btwはなぜテーブルに挿入するのがうまくいかないのかをデバッグするために別のテーブルに挿入することは難しいかもしれません;) – wonk0
実際に文字列を連結し、それをプリペアドステートメントに変換することはできませんか?それはパラメータの束縛を回避し、あなたはそれを複数回使用していません... – Naltharial