Создаю такую функцию:
CREATE OR REPLACE FUNCTION "public"."checkkart" (_numkart text, out skidka integer) AS
$body$
declare
colname record;
_discount integer;
begin
FOR colname IN SELECT * from discount where bar=_numkart
LOOP -- если запись найдена то присваем skidka=3
begin
select disc_perc into _discount from discount where bar=_numkart ;
skidka=3;
exit; --выход из цикла
end;
END LOOP;
if skidka>0 then exit; --если были найдены записи, то выходим.
else
skidka=0; --если не были найдены то skidka=0
end if;
end;
$body$
LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
как в этой функции поймать выходной параметр skidka в ZEOS??? (пишу на Д7 + Zeos 6.6.6.)
если сделать функцию с return то понятно,(убираем из объяевления - out skidka integer)
переписываем чтобы был return и потом через zeos получаем этот ретурн, так как после
выполнения функции он виден в zquery1.fields[0].AsVariant.( но мне надо не один ретурн а много, так как выходныхпараметров в итоге будет больше....)
видимо как то можно в zquery1.params..... поймать выходной параметр из функции, но как? не ясно... может кто подскажет?
и еще может кто знает если ли у типа record какое нить свойство типа recordcount (next,previous,EOF)??
а то цикл использовать тут это бред...
Ваш вопрос скорее касается не
Ваш вопрос скорее касается не PostgreSQL,а библиотеки Zeos.
Функция в PostgreSQL может возвращать несколько значений - это раз. Для этого надо вернуть либо строку либо тот же record.
Зачем вам там цикл я тоже не понял, как и не понял что вы хотите добиться в целом, может быть если объясните, смогу что-либо посоветовать.
ладно, поставлю вопрос по
ладно, поставлю вопрос по другому.
функция
CREATE OR REPLACE FUNCTION "public"."checkkart1" (_numkart text, out _discount integer, out _name text, out _telefon text) AS
$body$
declare
begin
select disc_perc, name, telefon into _discount, _name, _telefon from discount where bar=_numkart ;
end;
$body$
LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
при выполнении функции (через sql PgAdmin ) - select checkkart ('12345')
выдает ошибку :
ERROR: control reached end of function without RETURN
CONTEXT: PL/pgSQL function "checkkart"
********** Ошибка **********
ERROR: control reached end of function without RETURN
как я понимаю он не может вернуть эти три параметра в каких то отдельных столбцах... видимо ему их надо запихать в text или в тот же record, я правильно понимаю? (соответственно переписать функцию чтобы был return)
Сообщение об ошибке вам ясно
Сообщение об ошибке вам ясно говорит:
ERROR: control reached end of function without RETURN
ОШИБКА: достигнут конец функции, но RETURN не обнаружен
Вернуть оно может всё что угодно, только вы ничего не возвращаете вот в чём проблема.
Прочитайте мануал, там много примеров, думаю вы без труда найдёте что-то, что можно адаптировать под вас:
http://postgresql.ru.net/manual/plpgsql.html
Можете ещё сюда заглянуть:
http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL...