Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySql स्टेटमेंट तैयार करता है - क्या कॉलम नाम या फ़ंक्शन नाम को पैरामीट्रिज करना संभव है?

आप नहीं पैरामीट्रिज कॉलम/टेबल/फ़ंक्शन नाम/उपनाम। जैसे, 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 ;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL इंजेक्शन के खिलाफ रोकथाम

  2. MySQL में एकाधिक तालिकाओं में मिलान रिकॉर्ड कैसे प्राप्त करें

  3. आज और कल के बीच चयन करें

  4. अक्षर ي और और फारसी में अंतर - Mysql

  5. यह पीडीओ तैयार बयान झूठा रिटर्न देता है लेकिन एक त्रुटि नहीं फेंकता है