Привет всем. Есть функция, которая делит одно число на другое. Необходимо, если второй параметр равен нулю, то выводить сообщение об ошибке с помощью другой функции. Возможно ли это?
Функция деления:
CREATE OR REPLACE FUNCTION public.print (cif real, cit real)
RETURNS REAL AS
$body$
DECLARE
result real;
BEGIN
IF (cit = 0)
then
SELECT msg('Ошибка!');
end if;
result = cif / cit;
RETURN result;
END;
$body$
LANGUAGE 'plpgsql';
Функция вывода сообщения:
CREATE OR REPLACE FUNCTION msg(msgerror character varying)
RETURNS character varying AS
$BODY$
BEGIN
RETURN MsgError;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 1;
ALTER FUNCTION msg(character varying)
OWNER TO postgres;
Первая функция успешно создана. Но если выполнить:
SELECT public.print (1,0)
То получаю ошибку:
ОШИБКА: в запросе нет назначения для данных результата
HINT: Если вам нужно отбросить результаты SELECT, используйте PERFORM.
CONTEXT: функция PL/pgSQL print(real,real), строка 8, оператор SQL-оператор
********** Ошибка **********
ОШИБКА: в запросе нет назначения для данных результата
SQL-состояние: 42601
Подсказка: Если вам нужно отбросить результаты SELECT, используйте PERFORM.
Контекст: функция PL/pgSQL print(real,real), строка 8, оператор SQL-оператор
Я понимаю, что тип функции другой и не совпадает. Пробовал ещё так:
CREATE OR REPLACE FUNCTION public.print (cif real, cit real)
RETURNS REAL AS
$body$
DECLARE
result real;
BEGIN
IF (cit = 0)
then
Return( msg('Ошибка!') );
end if;
result = cif / cit;
RETURN result;
END;
$body$
LANGUAGE 'plpgsql';
Но функция должна возвращать REAL. Как быть? Подскажите пожалуйста.