2016-10-13 23 views
0

这种说法是错误抛出:与阵列Select语句抛出错误

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;