powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблемы с array_append() на PostgreSQL 8.1
5 сообщений из 5, страница 1 из 1
Проблемы с array_append() на PostgreSQL 8.1
    #34495309
cooluser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа!

Есть ХП, которая делает выборку затем идет по ней цилком и над некоторыми объектами выполняет нужные операции, затем те объекты которые модифировались добавляются в массив с помощью функции array_append() и возвращаются как результат ХП.

Проблема в том, что на PostgreSQL 8.1 функция возвращает всегда пустой результат (т.е. даже не массив, а именно возвращаемое значение пустое), в том время как на PostgreSQL 8.2 и с той же самой БД функция отрабатывает и возвращает корректный результат.

Выглядит это все примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE or replace FUNCTION array_test(varchar) RETURNS varchar[] AS '
declare

  affected varchar[];
begin
  loop
          ....
 
	  affected=array_append(affected,name);
          -- печатает не пустое значение для name
          raise notice name;
          
    
  end loop;
  RETURN affected;
end;
' LANGUAGE plpgsql;

Если запустить результат такой:
array_test
-----------------------------

(1 row)

Куда копать? Т.е. в name у меня точно нормальное значение попадает, это видно из вывода raise notice.
...
Рейтинг: 0 / 0
Проблемы с array_append() на PostgreSQL 8.1
    #34495398
cooluser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашел в чем дело, проблема в том что массив affected внутри ХП не инициализируется и видимо поэтому array_append() не добавляет в него ничего и возвращает пустое значение.

Если явно проинициализировать например вот так:
affected_keys=ARRAY[''''];

то возвращает корректный массив результатов. Но при этом массив будет содержать одно лишнее пустое значение. Как этого избежать и правильно сделать инициализацию массива?
...
Рейтинг: 0 / 0
Проблемы с array_append() на PostgreSQL 8.1
    #34495448
BlackDan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
_arrayVar := '{}';
_arrayVar := '{}'::VARCHAR[];
_arrayVar := '{}'::INTEGER[];
и т.д.
...
Рейтинг: 0 / 0
Проблемы с array_append() на PostgreSQL 8.1
    #34495471
cooluser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, BlackDan спасибо тебе, помогло.
...
Рейтинг: 0 / 0
Проблемы с array_append() на PostgreSQL 8.1
    #34495475
BlackDan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
будет примерно так (+ рекомендую для экранирования кавычек тела функции использовать $BODY$ - очень облегчает кодирование)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE or replace FUNCTION array_test(varchar) RETURNS varchar[] AS 
$BODY$
declare

   affected varchar[] := '{}';
begin
  loop
          ....
 
	  affected=array_append(affected,name);
          -- печатает не пустое значение для name
          raise notice name;
          
    
  end loop;
  RETURN affected;
end;
$BODY$ LANGUAGE plpgsql;
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблемы с array_append() на PostgreSQL 8.1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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