誰かが助けられると思っています。私は最初のストアドプロシージャー(何も気にしない)を作成しましたが、問題にぶち当たっています。MYSQL - コンマで区切られた文字列を変数入力として使用するストアドプロシージャ
-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$
CREATE PROCEDURE `moments`.`new_procedure`(IN var1 VARCHAR(255))
BEGIN
SELECT * FROM moments.PRODUCT WHERE EAN IN (var1);
END
イム午前:私はそれを、このような1,2,3,4,5として文字列の入力を与えたい
は、それが簡単なSELECT * FROM [TABLE] WHERE EAN IN (VAR);
を行いますので、ストアドプロシージャは、次のようになりますこのようようにそれを実行しようとしている:
作品
call moments.new_procedure('5045318357397')
が
call moments.new_procedure('5045318357397,5045318357427');
機能しないこれが実行されるが、任意の結果を持ち帰るないdoesntの。
select * from moments.PRODUCT WHERE EAN IN ('5045318357397,5045318357427')
はなく、この:その本やって、それは文字列として第2の文をクラス分けされ
select * from moments.PRODUCT WHERE EAN IN ('5045318357397','5045318357427')
をどのように私はそれを取るために得ることを実行したクエリでの入力をフォーマットする必要がありませんコンマ区切りの文字列を入力として使用しますか?あなたが使用することができ
PREPARE stmt1 FROM CONCAT('select * from moments.PRODUCT WHERE EAN IN (',var1,')');
EXECUTE stmt1;
これは、格納されたproc内で完璧に動作します。ありがとうございます。これは、私がCast Ironアプリケーションから呼び出す方法でもあります。これは追加ボーナスです。 – MMKD
これはうまくいきますが、テーブルからすべての行をフェッチして各行をセットと比較する必要があるので効率的ではありません。また、一致するかどうかを確認するためにコンマ区切りリストをループしなければなりません。 #列の数が少ない場合は、それ以外の場合はバッターの方法を見つけるべきです – Populus
@Populusのコメントをもっと根絶する必要があります - FIND_IN_SETはテーブルインデックスを使用しないため、この方法で使用すると大きなパフォーマンス上の問題が発生する可能性があります –