9

誰かが助けてくれることを願っています。私は最初のストアド プロシージャを作成しましたが (派手なものは何もありません)、問題が発生しています。

1,2,3,4,5 などの文字列入力を与えたい場合は、単純に実行しますSELECT * FROM [TABLE] WHERE EAN IN (VAR);

したがって、ストアド プロシージャは次のようになります。

-- --------------------------------------------------------------------------------
-- 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

私は次のように実行しようとしています:

作品

call moments.new_procedure('5045318357397')

動作しません

call moments.new_procedure('5045318357397,5045318357427');

これは実行されますが、結果は返されません。2番目のステートメントを文字列として分類しているので、これを行っています:

select * from moments.PRODUCT WHERE EAN IN ('5045318357397,5045318357427')

これではありません:

select * from moments.PRODUCT WHERE EAN IN ('5045318357397','5045318357427')

コンマ区切りの文字列を入力として取得するには、実行クエリの入力をどのようにフォーマットする必要がありますか?

4

2 に答える 2

19

You could use:

SELECT * FROM moments.PRODUCT 
WHERE FIND_IN_SET(EAN, var1)

This should work assuming it is actually comma delimited. Any other delimiting will not work in this case.

于 2012-09-17T16:12:17.877 に答える
2

渡した文字列が何らかの方法で検証され、悪意のあるSQLが含まれていないと仮定すると、プリペアドステートメントを使用できます。

PREPARE stmt1 FROM CONCAT('select * from moments.PRODUCT WHERE EAN IN (',var1,')');
EXECUTE stmt1;
于 2012-09-17T16:06:29.803 に答える