Возврат одиночного значения из хранимой процедуры

В настоящее время MySQL не позволяет возвращать значение из процедуры с помощью оператора RETURN, но есть несколько решений этой проблемы:

Преобразование процедуры в функцию

CREATE FUNCTION sp_existing_employee
 (v_employee_name VARCHAR(128), 
  v_employee_id INTEGER) 
RETURNS INT 
BEGIN 
 IF(EXISTS(SELECT * FROM employees 
            WHERE employee_name = v_employee_name AND 
             employee_id = v_employee_id)) then 
   RETURN 0; 
  END IF; 

RETURN 1; 
END; 

Затем вызовите процедуру:

SET status = sp_returnvalue(...) 
or 
SELECT sp_returnvalue(...) INTO status 

Использование параметра OUT для возврата значения

CREATE PROCEDURE sp_existing_employee
 (v_employee_name VARCHAR(128), 
  v_employee_id INTEGER,
  INOUT status INT) 
L_return: 
BEGIN 
  IF(EXISTS(SELECT * FROM employees 
             WHERE employee_name = v_employee_name AND 
                   employee_id = v_employee_id)) then  
    SET status = 0; 
    LEAVE L_return; 
  END IF; 

SET status = 1; 
END; 

Использование набора результатов для возврата значения

CREATE FUNCTION sp_existing_employee
 (v_employee_name VARCHAR(128), 
  v_employee_id INTEGER) 
RETURNS INT 
BEGIN 
 IF(EXISTS(SELECT * FROM employees 
            WHERE employee_name = v_employee_name AND 
             employee_id = v_employee_id)) then 
   SELECT 0;
   RETURN; 
  END IF; 

SELECT 1; 
RETURN; 
END; 

Эквиваленты в других базах данных

Database Equivalent
SQL Server RETURN statement allows specifying a return value

Если у вас есть другие вопросы, пожалуйста, свяжитесь с нами: support@convertum.ru