The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Имя таблицы, как аргумент функции"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Имя таблицы, как аргумент функции"  
Сообщение от vlad email(??) on 10-Май-06, 12:14 
Есть проблема: надо создать функцию для работы с таблицами, у которой аргумент - имя таблицы, с которой она должна работать. Но PostgreSQL не раскрывает подстановки типа SELECT что-нибудь FROM $1 (или имя переменной). Не подскажет ли кто-нибудь решение?
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Имя таблицы, как аргумент функции"  
Сообщение от СергейК email(??) on 10-Май-06, 15:36 
>Есть проблема: надо создать функцию для работы с таблицами, у которой аргумент
>- имя таблицы, с которой она должна работать. Но PostgreSQL не
>раскрывает подстановки типа SELECT что-нибудь FROM $1 (или имя переменной). Не
>подскажет ли кто-нибудь решение?

SQL-ную функцию такую не написать, но на PL/pgSQL можно.
Если достаточно чтобы функция возвращала одну запись, то можно использовать EXECUTE INTO внутри PL/pgSQL (см. http://www.postgresql.org/docs/8.1/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN )

А если нужна Set Returning Function, то можно сделать с помощью курсоров (похоже на пример вот здесь http://www.postgresql.org/docs/8.1/static/plpgsql-cursors.html#PLPGSQL-CURSOR-USING ). В функции надо сначала получить курсор на Ваш динамический запрос, а потом пройтись циклом по результатам из курсора.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "Имя таблицы, как аргумент функции"  
Сообщение от vlad email(??) on 12-Май-06, 07:10 
Проблема решилась примерно так:
CREATE OR REPLACE FUNCTION test2(text)
RETURNS text AS
'
DECLARE
curs1 refcursor;
out_raw record;
BEGIN
OPEN curs1 FOR EXECUTE ''SELECT * FROM '' || quote_ident($1);
FETCH curs1 INTO out_raw;
CLOSE curs1;
RETURN out_raw.dir;
END;
'
LANGUAGE 'plpgsql';

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру