दुर्भाग्य से, MySQL DEFAULT
पैरामीटर मान का समर्थन नहीं करता है, तो:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to use
near 'DEFAULT 0) BEGIN END' at line 3
इस सीमा को हल करने के लिए, बस अतिरिक्त प्रक्रियाओं है कि आवंटित बनाएँ:
CREATE PROCEDURE `blah`
(
myDefaultParam int DEFAULT 0
)
BEGIN
-- Do something here
END
त्रुटि देता है मूल प्रक्रिया के लिए डिफ़ॉल्ट मान:
DELIMITER //
DROP PROCEDURE IF EXISTS blah//
DROP PROCEDURE IF EXISTS blah2//
DROP PROCEDURE IF EXISTS blah1//
DROP PROCEDURE IF EXISTS blah0//
CREATE PROCEDURE blah(param1 INT UNSIGNED, param2 INT UNSIGNED)
BEGIN
SELECT param1, param2;
END;
//
CREATE PROCEDURE blah2(param1 INT UNSIGNED, param2 INT UNSIGNED)
BEGIN
CALL blah(param1, param2);
END;
//
CREATE PROCEDURE blah1(param1 INT UNSIGNED)
BEGIN
CALL blah2(param1, 3);
END;
//
CREATE PROCEDURE blah0()
BEGIN
CALL blah1(4);
END;
//
फिर, इस चल:
CALL blah(1, 1);
CALL blah2(2, 2);
CALL blah1(3);
CALL blah0();
वापस आ जाएगी:
+--------+--------+
| param1 | param2 |
+--------+--------+
| 1 | 1 |
+--------+--------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
+--------+--------+
| param1 | param2 |
+--------+--------+
| 2 | 2 |
+--------+--------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
+--------+--------+
| param1 | param2 |
+--------+--------+
| 3 | 3 |
+--------+--------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
+--------+--------+
| param1 | param2 |
+--------+--------+
| 4 | 3 |
+--------+--------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
फिर, अगर आप केवल blah2()
, blah1()
और blah0()
प्रक्रियाओं का उपयोग सुनिश्चित करें, अपने कोड तुरंत होने की जरूरत नहीं होगी अपडेट किया गया, जब आप blah()
प्रक्रिया में तीसरा पैरामीटर जोड़ते हैं।
स्रोत
2012-10-02 16:02:09
डुप्लिकेट: http://stackoverflow.com/questions/12652241/writing-optional-parameters-within-stored-procedures-in-mysql –
करता MariaDB यह एक ही समस्या है? –