Ошибка MySQL: "Не разрешено возвращать набор результатов из функции"?

Я пытаюсь обернуть голову вокруг функций в MySQL, и в настоящее время я делаю одну, которая проверяет столбец account_description и стоит посмотреть, если описание уже существует.

Если он уже существует, отобразите сообщение о том, что так. Однако, если описание отсутствует, отобразите другое сообщение о том, что оно не найдено.

Спасибо!

MySQL Code:

DROP FUNCTION IF EXISTS test_glaccounts_description

DELIMITER //

CREATE FUNCTION test_glaccounts_description
(
    check_description VARCHAR(50)
)
RETURNS VARCHAR(50)
BEGIN

DECLARE var_check VARCHAR(50);

SELECT
    account_description INTO var_check
FROM
    general_ledger_accounts
WHERE
    account_description = check_description;

    IF var_check = check_description THEN
        SELECT 'That description already exists.';
    ELSEIF var_check != check_description THEN
        SELECT 'That description does not exist.';
    END IF;

RETURN var_check;

END //

DELIMITER ;

SELECT
    test_glaccounts_description(account_description) as 'Check'
FROM 
    general_ledger_accounts
WHERE
    account_description = 'Accounting';

1 ответ

Решение

Вы не можете использовать SELECT для отображения сообщения в сохраненной функции, вы ограничены в возврате одного значения с помощью оператора RETURN. Вы найдете это в документации

Операторы, которые возвращают набор результатов, могут использоваться в хранимой процедуре, но не в хранимой функции. Этот запрет включает в себя операторы SELECT, у которых нет предложения INTO var_list, и другие операторы, такие как SHOW, EXPLAIN и CHECK TABLE. Для операторов, которые могут быть определены во время определения функции для возврата набора результатов, возникает Не разрешено возвращать набор результатов из ошибки функции (ER_SP_NO_RETSET). Для операторов, которые могут быть определены только во время выполнения для возврата набора результатов, PROCEDURE %s не может вернуть набор результатов в данном контексте, возникает ошибка (ER_SP_BADSELECT).

Другие вопросы по тегам