Обсуждение: Re: [pgsql-ru-general] хранимая процедура: как вернуть NOT FOUND?

Поиск
Список
Период
Сортировка

Re: [pgsql-ru-general] хранимая процедура: как вернуть NOT FOUND?

От
Dmitriy Igrishin
Дата:
Приветсвтую,


7 марта 2011 г. 20:00 пользователь Dmitry E. Oboukhov <unera@debian.org> написал:
Если в хранимой процедуре выполнить SELECT то дальше можно будет
спросить в переменной FOUND выбралось ли что-либо.

SELECT * INTO variable FROM tbl LIMIT 1;
IF NOT FOUND THEN
  -- тут хочу выйти из функции вернув тот же NOT FOUND
END IF;
  -- а тут хочу добавить к выбранным данным койчего

FOUND имеет тип boolean устанавливается автоматически PL/pgSQL.
Подробности http://www.postgresql.org/docs/9.0/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-DIAGNOSTICS.

возбуждать исключение не хочу, хочу именно враппер на после селекта
приписать. как?
--
Не совсем понятно что именно Вы хотите, но использование RAISE
является традиционным в PL/pgSQL.

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera@debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
 `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537



--
// Dmitriy.


Re: хранимая процедура: как вернуть NOT FOUND?

От
"Dmitry E. Oboukhov"
Дата:
DI> Не совсем понятно что именно Вы хотите, но использование RAISE
DI> является традиционным в PL/pgSQL.

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

то есть функция должна либо возвращать пустой набор, либо строку
выбранную из одной из таблиц. см. мое соседнее письмо, я там
развернуто вопрос задал :)
--

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera@debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537

Вложения

Re: [pgsql-ru-general] хранимая процедура: как вернуть NOT FOUND?

От
Dmitriy Igrishin
Дата:


7 марта 2011 г. 21:23 пользователь Dmitry E. Oboukhov <unera@debian.org> написал:

DI> Не совсем понятно что именно Вы хотите, но использование RAISE
DI> является традиционным в PL/pgSQL.

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

то есть функция должна либо возвращать пустой набор, либо строку
выбранную из одной из таблиц. см. мое соседнее письмо, я там
развернуто вопрос задал :)
Вот и возращайте либо NULL, либо строку.
--

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera@debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
 `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537



--
// Dmitriy.


Re: хранимая процедура: как вернуть NOT FOUND?

От
"Dmitry E. Oboukhov"
Дата:
DI> Вот и возращайте либо NULL, либо строку.

NULL = одно возвращенное значение, а мне надо ноль возвращенных
значений, например:

wwm=> SELECT NULL;
 ?column?
----------

(1 row)

wwm=> SELECT NULL WHERE 0 = 1;
 ?column?
----------
(0 rows)


если функция возвращает NULL мы имеем тот же самый 1 row как если она
заполненный row бы вернула. А как "не вернуть ничего" (по аналогии со
вторым SELECT'ом)?

--

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera@debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537

Вложения

Re: [pgsql-ru-general] хранимая процедура: как вернуть NOT FOUND?

От
Dmitriy Igrishin
Дата:


7 марта 2011 г. 23:35 пользователь Dmitry E. Oboukhov <unera@debian.org> написал:

DI> Вот и возращайте либо NULL, либо строку.

NULL = одно возвращенное значение, а мне надо ноль возвращенных
значений, например:

wwm=> SELECT NULL;
 ?column?
----------

(1 row)

wwm=> SELECT NULL WHERE 0 = 1;
 ?column?
----------
(0 rows)


если функция возвращает NULL мы имеем тот же самый 1 row как если она
заполненный row бы вернула. А как "не вернуть ничего" (по аналогии со
вторым SELECT'ом)?
Такого быть не может. Функция обязана вернуть значение, даже типа void.
Если написать SELECT f() WHERE false, то функция f() просто не выполниться,
а значит и не возвратит значения.

--

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera@debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
 `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537



--
// Dmitriy.