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

mySQL में संग्रहीत कार्यविधि के पैरामीटर के रूप में एक स्तंभ नाम पास करना

आपको डायनामिक SQL का उपयोग करना होगा :

DELIMITER //
CREATE PROCEDURE myDB.edit_myTable(
    IN key CHAR(16), 
    IN col VARCHAR(100), 
    new_value  VARCHAR(200)
)
BEGIN
    SET @s = CONCAT(
        'UPDATE myDB.myTable SET `', 
         col, '` = ', QUOTE(new_value),
         ' WHERE key = ', QUOTE(key)
    );
    PREPARE stmt FROM @s;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END
//
DELIMITER;

कृपया ध्यान दें, जैसा कि Paul Spiegel द्वारा टिप्पणी की गई है। , स्तंभ नाम के लिए एक चर का उपयोग करने से SQL इंजेक्शन का जोखिम पैदा होता है। सुरक्षा में सुधार के लिए एक समाधान यह सुनिश्चित करना होगा कि इनपुट col MySQL सूचना स्कीमा का उपयोग करके लक्ष्य तालिका में मौजूद है:

DELIMITER //
CREATE PROCEDURE myDB.edit_myTable(
    IN key CHAR(16), 
    IN col VARCHAR(100), 
    new_value  VARCHAR(200)
)
BEGIN
    DECLARE col_exists INT;

    SELECT COUNT(*) INTO col_exists 
    FROM  information_schema.COLUMNS
    WHERE TABLENAME = 'mytable' AND COLUMN_NAME = col;

    IF (col_exists != 1) THEN
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = CONCAT('Column ', col, ' does not exist in table mytable');
    END IF;

    SET @s = CONCAT(
        'UPDATE myDB.myTable SET `', 
         col, '` = ', QUOTE(new_value),
         ' WHERE key = ', QUOTE(key)
    );
    PREPARE stmt FROM @s;
    EXECUTE stmt;
    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. रेल सर्वर प्रारंभ करने में असमर्थ

  2. MySQL सर्वर से कनेक्ट करना इतना धीमा क्यों है?

  3. दास पढ़ें, मास्टर सेटअप पढ़ें-लिखें

  4. PHP - MySQL डेटबेस से रिकॉर्ड्स को मानों के रूप में उपयोग करके चेक बॉक्स बनाएं

  5. टेक्स्ट/ब्लॉब को एक ही टेबल में स्टोर करें या नहीं?