Existen dos formas:
1. Con un procedimiento almacenado, se pasa un parámetro como OUT o INOUT:
Código SQL:
Ver originalCREATE PROCEDURE hola (OUT nombre CHAR(100))
BEGIN
-- ....
END;
2. Con una función, los parámetros de entrada son siempre IN y la salida es única y es parte del prototipo:
Código SQL:
Ver originalCREATE FUNCTION hola (OUT nombre CHAR(100)) RETURNS CHAR(100)
READS SQL DATA
BEGIN
-- ....
END;
El READS SQL DATA es para evitar problemas de modo de servidor, ya que debe determinarse qué es lo que hará.
Ahora bien, Dentro de cualquier script, un procedure se llama con CALL:
Código sql:
Ver originalCREATE TRIGGER dar_la_mano
BEFORE INSERT
ON saludos FOR EACH ROW
BEGIN
.....
CALL hola (NEW.nombre);
.....
END;
Mientras que un SF se invoca directamente, pero debe meter el resultado en alguna parte:
Código sql:
Ver originalCREATE TRIGGER dar_la_mano
BEFORE INSERT
ON saludos FOR EACH ROW
BEGIN
.....
@saludo:=hola (NEW.nombre);
.....
END;