2008-10-10 12 views

उत्तर

42

मुझे विश्वास नहीं है कि MySQL गतिशील एसक्यूएल का समर्थन करता है। आप "तैयार" कथन कर सकते हैं जो समान है, लेकिन अलग है।

mysql> PREPARE stmt FROM 
    -> 'select count(*) 
    -> from information_schema.schemata 
    -> where schema_name = ? or schema_name = ?' 
; 
Query OK, 0 rows affected (0.00 sec) 
Statement prepared 
mysql> EXECUTE stmt 
    -> USING @schema1,@schema2 
+----------+ 
| count(*) | 
+----------+ 
|  2 | 
+----------+ 
1 row in set (0.00 sec) 
mysql> DEALLOCATE PREPARE stmt; 

तैयार बयान अक्सर किसी क्वेरी के लिए एक कार्य योजना लागू करके देखने के लिए उपयोग किया जाता है:

यहाँ एक उदाहरण है। चूंकि उन्हें निष्पादित किया गया है कमांड और वर्ग को एक चर के लिए असाइन किया जा सकता है, आप गतिशील एसक्यूएल के समान व्यवहार को अनुमानित कर सकते हैं।

यहाँ एक अच्छा link इस बारे में है:

मत भूलना अंतिम पंक्ति का उपयोग कर stmt पुनःआवंटन करने के लिए!

शुभकामनाएं!

+3

यह काम नहीं कर रहा है का उपयोग कर गतिशील बयान के बाहर के माध्यम से पारित कर सकते हैं जब '?' तालिका नाम –

+0

आप के माध्यम से इस कोशिश कर रहे हैं के स्थान पर है mysql कंसोल? या किसी अन्य विधि का उपयोग कर, यदि आप इसे कोड में उपयोग कर रहे हैं, तो आपके प्रदाता को इसका समर्थन करना होगा। –

+1

स्पष्ट रूप से, वे भविष्य के संस्करणों के लिए [सटीक तत्काल] (http://dev.mysql.com/worklog/task/?id=2793) का अध्ययन कर रहे हैं। –

91

5.0.13 के बाद, संग्रहित प्रक्रियाओं में, आप गतिशील एसक्यूएल का उपयोग कर सकते हैं:

delimiter // 
CREATE PROCEDURE dynamic(IN tbl CHAR(64), IN col CHAR(64)) 
BEGIN 
    SET @s = CONCAT('SELECT ',col,' FROM ',tbl); 
    PREPARE stmt FROM @s; 
    EXECUTE stmt; 
    DEALLOCATE PREPARE stmt; 
END 
// 
delimiter ; 

गतिशील एसक्यूएल कार्य या ट्रिगर में काम नहीं करता। अधिक उपयोग के लिए the MySQL documentation देखें।

2

आप उपयोगकर्ता-निर्धारित वेरिएबल

Server version: 5.6.25-log MySQL Community Server (GPL) 

mysql> PREPARE stmt FROM 'select "AAAA" into @a'; 
Query OK, 0 rows affected (0.01 sec) 
Statement prepared 

mysql> EXECUTE stmt; 
Query OK, 1 row affected (0.01 sec) 

DEALLOCATE prepare stmt; 
Query OK, 0 rows affected (0.01 sec) 

mysql> select @a; 
+------+ 
| @a | 
+------+ 
|AAAA | 
+------+ 
1 row in set (0.01 sec) 
संबंधित मुद्दे