you have to initialise array before using. Like: declare a int[] = '{0,0,0,0,0, .................}'; begin a[10] := 11;
Ok, I got it, thanks! Now I can work with simle arrays. May I ask some more complex? I want to use ONE multidimensial array - the "id", "bytes_in" and "bytes_out". By another words, I need an array, each element of which must contain 3 values: ttc_id, bytes_in, bytes_out. I think it can be done like this: CREATE OR REPLACE FUNCTION myf_test() RETURNS void AS $$ DECLARE p_tmp RECORD; p_last_cpnt RECORD; p_bytes bigint[][][][]; i int; BEGIN SELECT * INTO p_last_cpnt FROM nn_cpnt WHERE account_id = 5 ORDER BY date_time DESC, cpnt_id DESC LIMIT 1; IF FOUND THEN FOR p_tmp IN SELECT ttc_id, bytes_in, bytes_out FROM nn_cpnt_traf WHERE cpnt_id = p_last_cpnt.cpnt_id ORDER BY ttc_id LOOP --RAISE NOTICE 'ttc_id[%] -> in[%] out[%]', p_tmp.ttc_id, p_tmp.bytes_in, p_tmp.bytes_out; -- get the next number for array index, ugly but works i = array_upper(p_bytes, 1) + 1; IF i IS NULL THEN i := 0; END IF; -- here I try to add element p_bytes[i] := ARRAY[p_tmp.ttc_id,p_tmp.bytes_in,p_tmp.bytes_out]; END LOOP; END IF; -- ... some work. and here is the beauty of multidimensial. As I think... FOR i IN COALESCE(array_lower(p_bytes,1),1) .. COALESCE(array_upper(p_bytes,1),-1) LOOP RAISE NOTICE 'p_bytes[%] = [%] / [%] / [%]', i, p_bytes[i][0], p_bytes[i][1], p_bytes[i][2]; END LOOP; END; $$ LANGUAGE plpgsql; But I make an error somewhere, again... =# SELECT myf_test(); ERROR: invalid input syntax for integer: "{1,1907262814,9308877139}" CONTEXT: PL/pgSQL function "myf_test" line 18 at assignment I think I not understand somewhat... -- engineer