Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / OUT и INOUT / 8 сообщений из 8, страница 1 из 1
16.02.2006, 14:20
    #33549132
Аналитик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OUT и INOUT
Можете привести примеры процедур, в которых используются OUT и INOUT параметры.
Я так понимаю что такого рода параметры достаточно нужная опция, но как их использовать мне честно говоря не понятно.
...
Рейтинг: 0 / 0
16.02.2006, 14:49
    #33549257
aTz (msk)
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OUT и INOUT
Например вот:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE OR REPLACE FUNCTION "public"."get_doc_parents" (inout node_id integer) RETURNS SETOF integer AS
$body$
DECLARE
  parent_id INTEGER;
BEGIN
  IF node_id IS NOT NULL THEN
    RETURN NEXT;
    WHILE node_id IS NOT NULL LOOP
      SELECT parent_id FROM docs WHERE id = node_id INTO parent_id;
        IF parent_id IS NULL THEN
          RETURN;
        END IF;
        node_id := parent_id;
        RETURN NEXT;
    END LOOP;
  END IF;
  RETURN;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

Затем делаем:
Код: plaintext
SELECT * FROM get_doc_parents( 300 );

Вернёт всех "родителей" ветки с id = 300.

С параметрами OUT всё тоже самое, только их передавать нельзя в вызов функции, а можно только возвращать.
...
Рейтинг: 0 / 0
16.02.2006, 15:21
    #33549386
Аналитик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OUT и INOUT
Спасибо за пример.
А почему вы использовали INOUT ведь в Вашем случае достаточно было бы использовать IN?
...
Рейтинг: 0 / 0
16.02.2006, 15:56
    #33549590
Кувалдин Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OUT и INOUT
АналитикСпасибо за пример.
А почему вы использовали INOUT ведь в Вашем случае достаточно было бы использовать IN?

Он менял node_id. Если бы это был только IN-параметр, то строка node_id := parent_id;выдавала бы ошибку.
...
Рейтинг: 0 / 0
16.02.2006, 16:03
    #33549616
Аналитик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OUT и INOUT
Ага, ясно спасибо. А можно привести пример просто с OUT параметром.

Может у кого-то есть ссылка на подробное описание OUT и INOUT параметров, т.к. в help недостаточно информации.
...
Рейтинг: 0 / 0
16.02.2006, 17:39
    #33550002
Иман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OUT и INOUT
ну дык OUT по аналогии с ораклом:
присваиваеть ему можно, а в правой части выражения использовать незя
...
Рейтинг: 0 / 0
16.02.2006, 17:43
    #33550016
aTz (msk)
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OUT и INOUT
Пожалуйста

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE OR REPLACE FUNCTION range10 (out id integer, out name text) RETURNS SETOF record AS
$body$
DECLARE
  rec RECORD;
BEGIN
  FOR rec IN EXECUTE 'SELECT id, name FROM table1' LOOP
    id := rec.id;
    name := rec.name;
    RETURN NEXT;
  END LOOP;
  RETURN;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

Далее делаем
Код: plaintext
SELECT id, name FROM range10()

И в результате получаем все строки с полями id и name из таблицы table1
...
Рейтинг: 0 / 0
16.02.2006, 17:59
    #33550080
Аналитик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OUT и INOUT
Спасибо большое, теперь понятно.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / OUT и INOUT / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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