आप नहीं पैरामीट्रिज कॉलम/टेबल/फ़ंक्शन नाम/उपनाम। जैसे, PREPARE
कथन केवल SQL क्वेरी के "मान" भाग को पैरामीटर के रूप में उपयोग करने की अनुमति देता है। SQL कथन की वैधता निर्धारित करने के लिए फ़ंक्शन/टेबल/कॉलम नाम/उपनाम का उपयोग किया जाता है; और इस प्रकार रन-टाइम निष्पादन के दौरान बदला नहीं जा सकता। निष्पादन समय पर इसे बदलने से संभावित रूप से बदल जाएगा कि SQL कथन मान्य था या नहीं।
आप इसे एक कोड संकलित करने के रूप में सोच सकते हैं; इसलिए संकलक को एक वैध निष्पादन योग्य बनाने के लिए सभी फ़ंक्शन/वर्ग नाम आदि को जानना चाहिए (हां, हम गतिशील कक्षाएं कर सकते हैं, लेकिन यह दुर्लभ है ) दूसरी ओर, हम इनपुट "मान" को प्रोग्राम में बदल सकते हैं, लेकिन आम तौर पर नहीं इनपुट डेटा पर किए जाने वाले संचालन को बदलें।
साथ ही, MySQL सर्वर क्वेरी निष्पादन में उपयोग करने से पहले मापदंडों को शाब्दिक मानेगा, और उनके चारों ओर उद्धरण लागू करेगा।
अब, आपके मामले में, आप अभी भी संग्रहीत प्रक्रिया के लिए पैरामीटर के रूप में फ़ंक्शन नाम का उपयोग कर सकते हैं, और इसका उपयोग करके क्वेरी स्ट्रिंग उत्पन्न कर सकते हैं। लेकिन आप इसे क्वेरी के लिए एक पैरामीटर के रूप में उपयोग नहीं कर सकते।
delimiter $$
create procedure test(in func varchar(20), in col varchar(20))
begin
set @c = col;
-- use concat function to generate the query string using func parameter
set @sql = concat('select ', func, '(?) from table');
-- prepare the statement
prepare stmt from @sql;
-- execute
execute x using @c;
-- don't forget to deallocate the prepared statement
deallocate prepare stmt;
end$$
delimiter ;