Bu, MySQL 5.1'dir.MySQL: Prosedür paramlarını, EXECUTE USING ifadesine geçirme
(Not: Bu benim gerçek kodu değil bu özel örneği yapmanın daha iyi yolları vardır fark): Bunu CALL zaman Aşağıdaki prosedür oluşturulan alır, ancak
İşteyapmak istediğim şeydir Ben "HATA 1210 (HY000): Yanlış argümanlar başaltmak için" get
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
yürütmek KULLANMA açıklamaya yordamın parametreleri aktarmak için bir yol var mı? İşte gerçekten iş yapan bir sürüm değildir beni rahatsız ediyor: Yan soru olarak
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() ve quote_ident gibi, dizeleri kaçan için olanakların var?
referans noktası için, burada Postgres için biraz eşdeğer şey:
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
teşekkürler!
:: hayır yanlış anlama söz konusu diye
İşte Güncelleme, SET @ sql = CONCAT ('test_table SELECT * FROM WHERE durum =' devlet); Sonra derler, ama bunu ARA, ben alıyorum: mysql> ÇAĞRI get_users_by_state ('AA') // HATA 1054 (42S22): 'hükmü burada' Yani var içinde Bilinmeyen sütun 'AA' çevreleyecek Bazı düzeylerde tırnak işaretleri, –
görünüyor Ben parametre tutucu ile bir sürüm demek, birleştirme anlamına gelmez. 'SET @sql = 'SELECT * test_table WHERE durumundan =?';' – ChssPly76
Ah, anlıyorum. Bunu test edersem, ancak bu örneği çalıştırabilirsem, soruma cevap verecektim (: –