CALL कमांड का उपयोग करें, FROM क्लॉज में नहीं
MySQL में स्टोर्ड प्रोसीजर को SELECT ... FROM procedure() सिंटैक्स से कॉल नहीं कर सकते। इसके बजाय CALL कमांड उपयोग करें, फिर अलग से SELECT चलाएं।
उदाहरण
टेबल बनाएं:
mysql> CREATE TABLE DemoTable2 (
-> CustomerId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> CustomerName VARCHAR(100),
-> ShippingDateTime DATETIME
-> );
इन्सर्ट करने वाला प्रोसीजर बनाएं
mysql> DELIMITER //
mysql> CREATE PROCEDURE insert_information(Name VARCHAR(100), shippingtime DATETIME)
-> BEGIN
-> INSERT INTO DemoTable2(CustomerName, ShippingDateTime) VALUES(Name, shippingtime);
-> END //
mysql> DELIMITER ;
प्रोसीजर कॉल करें
mysql> CALL insert_information('Chris', NOW());
आउटपुट: Query OK, 1 row affected, 1 warning (0.15 sec)
फिर डेटा चुनें
mysql> SELECT * FROM DemoTable2;
परिणाम:
+------------+--------------+---------------------+ | CustomerId | CustomerName | ShippingDateTime | +------------+--------------+---------------------+ | 1 | Chris | 2019-04-08 15:03:07 | +------------+--------------+---------------------+
महत्वपूर्ण अंतर
| फंक्शन (FUNCTION) | प्रोसीजर (PROCEDURE) |
|---|---|
SELECT my_func() से कॉल | CALL my_proc() से कॉल |
| मान लौटाता है (RETURN) | OUT पैरामीटर या परिणाम सेट |
| SELECT में उपयोग संभव | SELECT में सीधे उपयोग नहीं |
यदि प्रोसीजर परिणाम सेट लौटाता है:
CALL my_procedure(); -- परिणाम सेट दिखेगा -- या एप्लिकेशन कोड में multiple result sets हैंडल करें
नोट: MySQL 8.0+ में CALL के बाद SELECT बिना सेमीकॉलन के भी चल सकता है यदि मल्टीपल स्टेटमेंट इनेबल हो।