Desafortunadamente, MySQL no soporta DEFAULT
valores de los parámetros, por lo que:
CREATE PROCEDURE `blah`
(
myDefaultParam int DEFAULT 0
)
BEGIN
-- Do something here
END
devuelve el error:
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
Para evitar esta limitación, sólo tiene que crear procedimientos adicionales que asignan valores predeterminados para el procedimiento original:
A continuación, se ejecuta este:
CALL blah(1, 1);
CALL blah2(2, 2);
CALL blah1(3);
CALL blah0();
volverá:
+--------+--------+
| 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)
Entonces, si se asegura de utilizar sólo los procedimientos blah2()
, blah1()
y blah0()
, su código no tiene por qué ser inmediatamente actualizado, cuando agrega un tercer parámetro al procedimiento blah()
.
duplicado: http://stackoverflow.com/questions/12652241/writing-optional-parameters-within-stored-procedures-in-mysql –
¿tiene mariaDB el mismo problema? –