powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Динамически получить значение по имени столбца в record
6 сообщений из 6, страница 1 из 1
Динамически получить значение по имени столбца в record
    #39913625
sdkmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

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

Код: 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
Динамически получить значение по имени столбца в record
    #39913654
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdkmaster,

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

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

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

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


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