1

MySql で作成された以下のストアド プロシージャで、両方のキャンペーンに一致するレコードを取得するために、パラメータを「Suburbun」、「Indigo」として渡しています。

CREATE PROCEDURE `DemoSP`(Campaign VARCHAR(3000))
BEGIN
    SET @query = CONCAT('Select * from vicidial_log WHERE campaign_id IN (?)');
  PREPARE stmt FROM @query;
  SET @CampaignID = Campaign;
  EXECUTE stmt USING @CampaignID;
  DEALLOCATE PREPARE stmt;
END;

行はありません!

しかし、SPで「Suburbun」のみを渡すと、6行になります!

どこが間違っているのですか?

- 答え !

Lee Fentress がhttp://www.poolofthought.com/index.php/2008/12/28/a-comma-seperated-list-as-parameter-to-mysql-stored-procedure/でコメントしたように試してみました。同様のコーディングを反映し、

出来た!

ありがとうございます。しかし、SQL Server と比較して、この否定的なマークが見つかりました。

ジー、ありがとうガイズ!!

4

3 に答える 3

0

この場合はご利用いただけませんUSING。完全なクエリ文字列を作成し、パラメーターなしで実行するだけです

DELIMITER $$
CREATE PROCEDURE DemoSP(Campaign VARCHAR(3000))
BEGIN
  SET @query = CONCAT('SELECT * FROM vicidial_log WHERE campaign_id IN (', Campaign, ')');
  PREPARE stmt FROM @query;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;

注:渡す区切り値Campaignが適切に引用されていることを確認してください(あなたが言ったように)、値の引用符がある場合はエスケープされます。

これがSQLFiddleのデモです

于 2014-01-04T09:20:46.287 に答える
0

これを試して:

を使用する必要はありませんPREPARE STATEMENTFIND_IN_SET()関数を使用して結果を取得できます

SELECT * FROM vicidial_log WHERE FIND_IN_SET(campaign_id, Campaign)
于 2014-01-04T08:53:29.320 に答える
-1

これを試して

"Select * from vicidial_log WHERE campaign_id IN ('?')"

それ以外の

'Select * from vicidial_log WHERE campaign_id IN (?)'
于 2014-01-04T08:51:03.490 に答える