5
これはMySQL 5.1です。MySQL:プロシージャパラメータをEXECUTE USING文に渡す
(注:私は、この特定の例を行うためのより良い方法がある実現し、これは私の本当のコードではありません)。ここ
は私が何をしたいです: 以下の手順が作成されますが、ときに私はそれを呼び出します、私は「ERROR 1210(HY000):不正な引数は、実行する」を得る
DELIMITER //
CREATE PROCEDURE get_users_by_state(IN state CHAR(2))
READS SQL DATA
BEGIN
SET @mystate = state;
SET @sql = CONCAT('SELECT * FROM test_table WHERE state = "?"');
PREPARE stmt FROM @sql;
EXECUTE stmt USING @mystate;
END;
//
CALL get_users_by_state('AA')//
ERROR 1210 (HY000): Incorrect arguments to EXECUTE
EXECUTEを使用してステートメントにプロシージャのパラメータを渡す方法はありますか?ここで が実際に作業したバージョンですが、私いらだた:サイド・質問のよう
CREATE PROCEDURE get_users_by_state(IN state CHAR(2))
READS SQL DATA
BEGIN
SET @sql = CONCAT('SELECT * FROM test_table WHERE state = "', state, '"')
PREPARE stmt FROM @sql;
EXECUTE stmt;
END;
//
を、MySQLは)(Postgresのquote_literal()とquote_identのように、文字列をエスケープするためにどんな施設がありますか?基準点については
は、ここではPostgresのため多少同等の何かがあります:
CREATE OR REPLACE FUNCTION get_info_by_state(character)
RETURNS SETOF ret_type AS
$BODY$
DECLARE
sql text;
BEGIN
sql := 'SELECT uid, some_data FROM test_table WHERE state = ' || quote_literal($1);
RETURN QUERY EXECUTE sql;
END
$BODY$
LANGUAGE 'plpgsql' VOLATILE
ありがとう!
は:SETの@sql = CONCATを(、状態 '状態= TEST_TABLE SELECT * FROM'); そして、それはコンパイルが、私は、私を得るそれを呼び出すとき: MySQLの> CALLのget_users_by_state( 'AA')// ERROR 1054(42S22): 'where句' に不明な列 'A' だから私は取り囲むように持っていますそれはいくつかのレベルで引用符では、それは –
と思われる私はパラメータホルダーではなく、連結を持つバージョンを意味した。 'SET @sql = 'SELECT * FROM test_table WHERE state =?'; ' – ChssPly76
ああ、そうだよ。私はそれをテストするだろうが、私はその例を働かせることができれば、私の質問に答えられるだろう(: –