Имена таблиц и столбцов как параметры функции

Доброго времени суток, я новичок в PostgreSQL. У меня есть задача, которая сводится к следующей -
написать функцию, которая возвращает таблицу-результат. Таблица-результат есть SELECT из двух таблиц, причем имена этих таблиц и имена колонок - параметры функции. Для простоты пример -
CREATE TABLE table1(
id int,
myText varchar(20)
.....
);
CREATE TABLE table2(
id int,
myText varchar(20)
.....
);
SELECT table1.id,table2.myText FROM table1,table2;
Я не понимаю
1) как воспользоватся именами таблиц и колонок для формирования селекта
2) как правильно вернуть таблицу?
Есть ограничение по функционалу - PostgreSQL 8.3, только plpgsql. Надеюсь на Вашу поддержку.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

http://postgresql.ru.net/docs

http://postgresql.ru.net/docs/extented_FAQ.html#Q003
можно обойти используя EXECUTE

А каким образом? Можно ссылку на пример?

или хотя бы направление идеи

Можно

на текущий момент имею следующий текст

CREATE OR REPLACE FUNCTION intersek(varchar, varchar,int, varchar ) RETURNS
SETOF record AS
$$
DECLARE
r record%rowtype;
qry text;
BEGIN
qry := "SELECT "||$1||".objectID, "|| $2 ||"."|| $4 ||", st_area(st_intersection("|| $1 ||".geom,"|| $2 ||".geom)) FROM "||$1||","||$2|| "
WHERE "||$1||".objectID="||$3||;
FOR r IN EXECUTE qry
LOOP
RETURN NEXT r;
END LOOP;
RETURN;
END
$$
language 'plpgsql';

оно компилится, но при действии
SELECT * FROM intersek('first','second',2,'objName') AS record(objID int, objName varchar,area int)
отвечает фразой column notation .objectid applied to type text, which is not a composite type
Как это вылечить? Старый ФИДОшный метод типа руки к батарее- не помогает

> column notation .objectid

> column notation .objectid applied to type text, which is not a composite type
нотация колонки .objectid применяется к типу text, который не является составным.
Т.е. в имени поля у вас точка, значит PostgreSQL считает, что вы хотите получить значение составного типа, что очевидно не так. Исправить так, чтобы не было точки я полагаю

Я понимаю в чем ошибка, но не понимаю как ее исправить

собственно, разумен ли вообще такой способ решения задачи? И если да, то как можно избавится от этой ошибки?

1. Способ решения не очень

1. Способ решения не очень правильный, но допустимый
2. Избавится разумеется можно, но я не знаю ваших таблиц и что вы хотите, поэтому более детальный совет вам дать не могу

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023