Ошибка MySQL: «Не разрешено возвращать набор результатов из функции»? - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь обернуть голову вокруг функций в 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 Ответ

0 голосов
/ 26 апреля 2018

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

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

...