Полностью заменить запись с несвязанным курсором PostgreSQL - PullRequest
0 голосов
/ 17 октября 2019

Можно ли использовать несвязанные курсоры для полного редактирования и замены строки в таблице?

Я использую несвязанные курсоры, поскольку таблица динамически указывается с параметром, но я не могу использоватьСинтаксис «UPDATE table SET column = value WHERE», поскольку столбцы не определены.

CREATE OR REPLACE FUNCTION trim_table(in_table TEXT) AS $$
  DECLARE
    ref REFCURSOR;
    current_row RECORD;
BEGIN
  OPEN ref FOR EXECUTE 'SELECT * FROM '|| quote_ident(in_table);
  LOOP
    FETCH ref INTO current_row;
    EXIT WHEN NOT FOUND;
    current_row = my_row_function(current_row);
    /*How can I replace my row here?*/
  END LOOP;
  CLOSE ref;
END
$$ LANGUAGE plpgsql;

Все примеры и ответы, которые я нашел, показывают только, как обновить одно поле, а не полную запись.

1 Ответ

1 голос
/ 23 октября 2019

Я думаю, что этот код может помочь вам в некоторых отношениях:

select 
    string_agg('UPDATE '||table_schema||'.'||table_name||chr(13)||' SET '||column_name||' = TRIM('||column_name||')', '; '||chr(13)) into query
from information_schema.columns
where data_type in ('varchar', 'text')
    and table_schema = 'your_schema'
    and table_name = 'your_table_name';

execute query;

Поместите его в свою процедуру, измените его для вашего удобства, и вам больше не понадобится этот цикл.

...