2009-07-16 16 views
5

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

धन्यवाद!

उत्तर

2

मुझे नहीं लगता कि आपको पैरामीटर धारक के चारों ओर डबल कोट्स की आवश्यकता है।

अद्यतन यहाँ, ऐसा न हो कि कोई गलतफहमी हो:

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; 
// 
+0

अगर मैं ऐसा करने के: SET @sql = concat ('test_table से चुनें * जहां राज्य =', राज्य); तो यह संकलित, लेकिन जब मैं इसे कहते हैं, मैं मिलता है: mysql> कॉल get_users_by_state ('एए') // त्रुटि 1054 (42S22): अज्ञात स्तंभ 'एए' में 'जहां खंड' तो मेरे पास है चारों ओर यह कुछ स्तरों पर उद्धरणों में, ऐसा लगता है कि –

+0

मेरा मतलब पैरामीटर धारक के साथ संस्करण था, न कि संगतता। 'SET @sql = 'चुनें * test_table से कहां राज्य =?'; ' – ChssPly76

+1

आह, मैं देखता हूं। मैं इसका परीक्षण करूंगा, लेकिन अगर मैं उस उदाहरण को काम कर सकता हूं, तो मेरे प्रश्न का उत्तर दिया जाएगा (: –

संबंधित मुद्दे