У меня есть таблица с несколькими столбцами в ней. Я хочу вернуть данные таблицы по функции вызова. В следующем я создал таблицу с некоторыми записями и также создал функцию для возврата результата запроса .Динамическое имя столбца в обратном типе
Таблица:
create table for_test
(
cola varchar(10),
colb varchar(10),
name varchar(20),
address varchar(50)
);
Вставка записей:
insert into for_test values('A101','B101','SAM','Munich');
insert into for_test values('A102','B102','AMC','Belgium');
insert into for_test values('A103','B103','MAM','Shanghai');
insert into for_test values('A104','B104','KOU','Dhaka');
Примечание: В функции я прошел один paramenter, который называется p_columnname
в , который я проедет имя столбца между cola or colb
.
ЕСЛИ я передаю имя столбца cola
, он должен вернуть результат, как cola colb name
.
ЕСЛИ я передаю имя колонки colb
, он должен вернуть результат, как colb cola name
.
Функции:
create or replace function for_test
(
p_columnname varchar(20)
)
RETURNS TABLE
(
_cola varchar(10),
_colb varchar(10),
_name varchar(20)
) AS
$$
DECLARE
v_details varchar;
v_query varchar;
BEGIN
IF p_columnname = 'cola' THEN
v_details := 'cola,colb,name';
ELSIF p_columnname = 'colb' THEN
v_details := 'colb,cola,name';
ELSE
v_details := 'cola,colb,name';
END IF;
v_query := 'SELECT '|| v_details ||' from for_test';
RAISE INFO '%',v_query;
RETURN QUERY EXECUTE v_query;
END;
$$
LANGUAGE PLPGSQL;
--Ел я прохожу ColumnName = 'кола' это покажет:
SELECT * FROM for_test('cola');
_cola _colb _name
-------------------
A101 B101 SAM
A102 B102 AMC
A103 B103 MAM
A104 B104 KOU
--Ел я прохожу имя_столбец = 'colb' это покажет:
SELECT * FROM for_test('colb');
_cola _colb _name
-------------------
B101 A101 SAM
B102 A102 AMC
B103 A103 MAM
B104 A104 KOU
Вопрос: Как изменить имя столбца в RETURN TABLE TYPE
, если входной столбец изменяется с cola
на colb
?
, что об этом 'выбрать _cola в _colb, _colb как _cola, _name из for_test ('colb');' –
@WingedPanther, Что если есть длинный список столбцов? Что я должен использовать «список столбцов», как вы использовали, или '*'? Что лучше? – MAK