समाधान: INSERT के लिए स्टोर्ड प्रोसीजर
पुन: प्रयोज्य, सुरक्षित डेटा सम्मिलन के लिए पैरामीटरयुक्त स्टोर्ड प्रोसीजर बनाएं।
व्यावहारिक उदाहरण
टेबल बनाना
mysql> CREATE TABLE StoredProcedureInsertDemo (
-> UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserName VARCHAR(20),
-> UserAge INT
-> );
स्टोर्ड प्रोसीजर बनाना
mysql> DELIMITER //
mysql> CREATE PROCEDURE procedure_InsertIntoTable(
-> IN FirstName VARCHAR(100),
-> IN Age INT
-> )
-> BEGIN
-> INSERT INTO StoredProcedureInsertDemo(UserName, UserAge)
-> VALUES (FirstName, Age);
-> END
-> //
Query OK, 0 rows affected (0.34 sec)
mysql> DELIMITER ;
प्रोसीजर कॉल करना
mysql> CALL procedure_InsertIntoTable('Larry', 23);
Query OK, 1 row affected, 1 warning (0.19 sec)
परिणाम देखना
mysql> SELECT * FROM StoredProcedureInsertDemo; +--------+----------+---------+ | UserId | UserName | UserAge | +--------+----------+---------+ | 1 | Larry | 23 | +--------+----------+---------+
स्टोर्ड प्रोसीजर के लाभ
- पुन: प्रयोज्यता: एक बार लिखें, कई बार कॉल करें
- सुरक्षा: SQL इंजेक्शन रोकथाम (पैरामीटर बाइंडिंग)
- प्रदर्शन: पार्स/ऑप्टिमाइज़ एक बार, कई बार निष्पादित
- एनकैप्सुलेशन: व्यावसायिक तर्क डेटाबेस में
- अनुमति: टेबल पर सीधे INSERT अधिकार दिए बिना EXECUTE अधिकार दें
उन्नत प्रोसीजर उदाहरण
सत्यापन के साथ
CREATE PROCEDURE insert_user_validated(
IN p_name VARCHAR(100),
IN p_age INT,
OUT p_user_id INT,
OUT p_status VARCHAR(50)
)
BEGIN
IF p_age < 0 OR p_age > 150 THEN
SET p_status = 'INVALID_AGE';
SET p_user_id = 0;
ELSEIF CHAR_LENGTH(TRIM(p_name)) = 0 THEN
SET p_status = 'EMPTY_NAME';
SET p_user_id = 0;
ELSE
INSERT INTO users(name, age) VALUES (TRIM(p_name), p_age);
SET p_user_id = LAST_INSERT_ID();
SET p_status = 'SUCCESS';
END IF;
END
लेनदेन के साथ
CREATE PROCEDURE insert_with_transaction(
IN p_name VARCHAR(100),
IN p_email VARCHAR(100)
)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
RESIGNAL;
END;
START TRANSACTION;
INSERT INTO users(name) VALUES (p_name);
INSERT INTO user_emails(user_id, email) VALUES (LAST_INSERT_ID(), p_email);
COMMIT;
END
phpMyAdmin में बनाना
- डेटाबेस चुनें → Routines टैब
- Add routine क्लिक करें
- नाम:
procedure_InsertIntoTable - प्रकार: PROCEDURE
- पैरामीटर जोड़ें:
FirstName VARCHAR(100) IN,Age INT IN - बॉडी में SQL डालें
- Go क्लिक करें
कॉल करना
CALL procedure_InsertIntoTable('John', 25);
CALL procedure_InsertIntoTable('Jane', 30);