Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Динамически получить значение по имени столбца в record / 6 сообщений из 6, страница 1 из 1
14.01.2020, 13:12
    #39913625
sdkmaster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамически получить значение по имени столбца в record
Всем привет!

Как динамически получить значение в записи по имени столбца???

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
create table secdata (
    ida bigint,
    city integer,
    points integer
);

--
-- создаем триггер на таблицу secdata
-- в триггерной функции вызываем get_diff с записями NEW, OLD
--

create function get_diff(colname text, NEW secdata, OLD secdata, out RET secdata) returns void as $$
declare
begin
    -- colname - имя столбца, значение которого нужно сравнить   


    -- вариант 1: не работает, потому что столбца 'colname' у типа 'secdata' нет
    if NEW.colname != OLD.colname then
        RET.colname = NEW.colname;
    end if;

    
    -- вариант 2: не работает, потому что 'execute' выполняет только SQL выражения
    execute format('if NEW.%I != OLD.%I then RET.%I = NEW.%I; end if;', colname, colname, colname, colname);


    -- вариант 3: ???            

end;
$$ language plpgsql;
...
Рейтинг: 0 / 0
14.01.2020, 14:02
    #39913654
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамически получить значение по имени столбца в record
sdkmaster,

часто задаваемый вопрос. ищите.

например :
https://www.sql.ru/forum/actualsearch.aspx?search=???????? ???????? ? ?????? ?? ????? ???????&sin=0&bid=7&a=&ma=0&dt=-1&s=1&so=1
...
Рейтинг: 0 / 0
14.01.2020, 15:09
    #39913717
entrypoint
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамически получить значение по имени столбца в record
sdkmaster,

ну и исходники у Вас
при создании функции, ошибка (не может быть returns void)
[src PLSQL]
ERROR: function result type must be secdata because of OUT parameters
SQL-состояние: 42P13
...
Рейтинг: 0 / 0
14.01.2020, 15:24
    #39913735
sdkmaster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамически получить значение по имени столбца в record
entrypoint,

Конечно там не должно быть "returns void" :)
Это обычный пример, чтобы была понятна суть вопроса.
...
Рейтинг: 0 / 0
14.01.2020, 16:42
    #39913812
Guzya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамически получить значение по имени столбца в record
Сделайте CASE по параметру colname.
...
Рейтинг: 0 / 0
14.01.2020, 19:43
    #39913920
Troglodit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамически получить значение по имени столбца в record
sdkmaster,
попробуйте to_jsonb(NEW)->get_diff.colname
может поможет
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Динамически получить значение по имени столбца в record / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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