यह MySQL 5.1 है।MySQL: उपयोग करने के लिए प्रक्रिया प्रक्रिया पैराम का उपयोग
(नोट: मुझे पता है वहाँ इस विशिष्ट उदाहरण करने का बेहतर तरीके हैं, यह मेरा वास्तविक कोड नहीं है)
यहाँ मुझे क्या करना चाहते हैं: नीचे प्रक्रिया बनाया जाता है, लेकिन जब मैं इसे कहते , मैं "त्रुटि 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
वहाँ निष्पादन का उपयोग बयान के प्रक्रिया के पैरामीटर भेजने के लिए एक रास्ता है? यहाँ एक संस्करण है कि वास्तव में काम करता है, लेकिन मुझे irks:
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 से चुनें * जहां राज्य =', राज्य); तो यह संकलित, लेकिन जब मैं इसे कहते हैं, मैं मिलता है: mysql> कॉल get_users_by_state ('एए') // त्रुटि 1054 (42S22): अज्ञात स्तंभ 'एए' में 'जहां खंड' तो मेरे पास है चारों ओर यह कुछ स्तरों पर उद्धरणों में, ऐसा लगता है कि –
मेरा मतलब पैरामीटर धारक के साथ संस्करण था, न कि संगतता। 'SET @sql = 'चुनें * test_table से कहां राज्य =?'; ' – ChssPly76
आह, मैं देखता हूं। मैं इसका परीक्षण करूंगा, लेकिन अगर मैं उस उदाहरण को काम कर सकता हूं, तो मेरे प्रश्न का उत्तर दिया जाएगा (: –