2016-10-13 1 views
0

Это утверждение бросает:Выберите оператор с массивом бросает ошибку

FOR _i2 IN 1 .. array_upper(p_extra_info, 1) LOOP 
    .... 
    SELECT currval('ad_extra_info_id_seq') INTO _new_extra_info_ids[_i2]; 
    .... 
END LOOP; 

ERROR: syntax error at or near "[" 
LINE 179: ...rrval('ad_extra_info_id_seq') INTO _new_extra_info_ids[_i2]; 
                   ^
********** Error ********** 

ERROR: syntax error at or near "[" 
SQL state: 42601 
Character: 7907 

Переменная _new_extra_info_ids объявляется так: _new_extra_info_ids integer[];

Вы знаете, что это неправильно?

+0

Во-первых одна рекомендации Пожалуйста, не объявить любое имя переменного, начиная с особым характером несколько раз с которыми я столкнулся компилятор запутаться с таким родом именования. –

+0

Я поставил «_» перед всеми объявленными переменными для различия - никогда не давал мне проблем. @a_horse_with_no_name, которое работает, спасибо. –

+1

Выполнение подобных действий в циклах _might_ указывает на неэффективную обработку наборов в вашей функции. Возможно, вам захочется вернуться к этой логике, но информации об этом недостаточно. Но, видя, что 'select' внутри цикла, как правило, звонит на звонок для меня. –

ответ

1

Используйте прямое назначение вместо выбора:

FOR _i2 IN 1 .. array_upper(p_extra_info, 1) LOOP 
    .... 
    _new_extra_info_ids[_i2] := currval('ad_extra_info_id_seq'); 
    .... 
END LOOP; 

 Смежные вопросы

  • Нет связанных вопросов^_^