Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / вызов plpgsql процедуры из другой процедуры / 5 сообщений из 5, страница 1 из 1
17.11.2006, 23:24
    #34138067
tier.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вызов plpgsql процедуры из другой процедуры
Приветствую, господа. Вопрос, на который не смог найти ответ в докуменации.
Мне нужно в plpgsql процедуре, в цикле, вызывать другую процедуру, передавая ей разные параметры.
Пробовал по разному, но заработало только:
query := 'SELECT func1(' || QUOTE_LITERAL(tn) || ')';
EXECUTE query;

Вопрос, нельзя ли выполнить func1 как-то иначе, без SELECT'а? Ведь он здесь, мне кажется ни к чему. И вывод этой процедуры мне абсолютно не нужен, надо только чтобы она выполнила свою работу. При таком же способе запуска еще печатаются в консоль непонятные сообщения, которые тоже мне ни к чему абсолютно:
CONTEXT: SQL statement "SELECT func1('tabl_594')"
PL/pgSQL function "func1" line 9 at execute statement

И это печатается многократно, столько раз, сколько в цикле вызывалась func1.
Как с этим бороться? Может есть другой, более правильный способ выполнения процедуры...

Спасибо.
...
Рейтинг: 0 / 0
18.11.2006, 09:45
    #34138270
ZemA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вызов plpgsql процедуры из другой процедуры
PostgreSQL 7.4 Documentation
37.6.3. Executing an Expression or Query With No Result

Sometimes one wishes to evaluate an expression or query but discard the result (typically because one is calling a function that has useful side-effects but no useful result value). To do this in PL/pgSQL, use the PERFORM statement:

PERFORM query;

This executes query, which must be a SELECT statement, and discards the result. PL/pgSQL variables are substituted in the query as usual. Also, the special variable FOUND is set to true if the query produced at least one row or false if it produced no rows.

Note: One might expect that SELECT with no INTO clause would accomplish this result, but at present the only accepted way to do it is PERFORM.

An example:

PERFORM create_mv(''cs_session_page_requests_mv'', my_query);
...
Рейтинг: 0 / 0
18.11.2006, 13:14
    #34138431
tier.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вызов plpgsql процедуры из другой процедуры
Спасибо, именно это мне и нужно было - запускать процедуру без SELECT. Работатет. Я, кстати, до того как задать вопрос пробовал PERFORM, но, видно, запускал его неправильно - тогда не заработало. А сейчас - нормально.
Но, все те же загадочные сообщения по прежнему выводятся:
CONTEXT: SQL statement "SELECT func1('tabl_594')"
PL/pgSQL function "func1" line 9 at execute statement

Что бы это могло значить?
...
Рейтинг: 0 / 0
18.11.2006, 13:54
    #34138460
ZemA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вызов plpgsql процедуры из другой процедуры
посмотрите параметр client_min_messages в конфигурационном файле <<путь к постгресу>>/data/postgresql.conf
...
Рейтинг: 0 / 0
18.11.2006, 14:38
    #34138490
tier.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вызов plpgsql процедуры из другой процедуры
Эти сообщения, видимо, имеют уровень notice.
По дефолту notice и есть значение этого параметра в конфиге. Если ставлю следующуй более низкий уровень (warning), эти сообщения пропадают. Так же как и мои, нужные мне, котрые я вывожу с пом. RAISE NOTICE :)
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / вызов plpgsql процедуры из другой процедуры / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]