alias arguments

Изображение Useful

подскажите пожалуйста как перебирать псевдонимы аргументов функции в PLpgSQL, например:
create or replace function test(text,text,text,text,text,text,text,text,text,text) returns void as $$
declare
g integer;
begin
for g in 1..10 loop
insert into table values ($g);
end loop;
end;
$$
language 'plpgsql'

заранее, спасибо

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

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

Перебирать либо по именам,

Перебирать либо по именам, либо по номерам: $1, $2.... $N
В цикле у вас это не получится. Но есть варианты.
1. Указывать массив как аргумент функции как описано в документации:

CREATE FUNCTION sum(int[]) RETURNS int8 AS $$
DECLARE
  s int8 := 0;
  x int;
BEGIN
  FOREACH x IN ARRAY $1
  LOOP
    s := s + x;
  END LOOP;
  RETURN s;
END;
$$ LANGUAGE plpgsql;

2. Использовать в качестве аргумента функции имя таблицы, в которой лежат нужные вам данные и тогда при выполнении функции делать запрос к таблице и работать с результатом этого запроса:

CREATE FUNCTION cs_refresh_mviews() RETURNS integer AS $$
DECLARE
    mviews RECORD;
BEGIN
    RAISE NOTICE 'Refreshing materialized views...';
 
    FOR mviews IN SELECT * FROM cs_materialized_views ORDER BY sort_key LOOP
 
        -- Now "mviews" has one record from cs_materialized_views
 
        RAISE NOTICE 'Refreshing materialized view %s ...', quote_ident(mviews.mv_name);
        EXECUTE 'TRUNCATE TABLE ' || quote_ident(mviews.mv_name);
        EXECUTE 'INSERT INTO '
                   || quote_ident(mviews.mv_name) || ' '
                   || mviews.mv_query;
    END LOOP;
 
    RAISE NOTICE 'Done refreshing materialized views.';
    RETURN 1;
END;
$$ LANGUAGE plpgsql;

это функция для клиента, т.ч.

Изображение Useful

это функция для клиента, т.ч. второй вариант не подойдет, а вот первый то что надо.
огромное спасибо!

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

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

Back to top

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