【PostgreSQL】配列の指定箇所に値を入れる(数値)
配列の指定箇所に値を入れる関数
配列の指定箇所に値を入れる(数値)
引数
引数1(character varying[]):挿入する配列
引数2(numeric):挿入する場所(1からカウント)
引数3(character varying):挿入する数値
返り値
値を挿入した後の配列
コード
CREATE OR REPLACE FUNCTION insert_into_array_num(
numeric[],
numeric,
numeric)
RETURNS numeric[] AS
$BODY$
declare
a_array alias for $1; --引数1:挿入する配列
insert_pos alias for $2; --引数2:挿入する場所(1からカウント)
c_insert_char alias for $3; --引数3:挿入する数値
return_array numeric[];
begin
for temp_count in 1..array_length(a_array,1)
loop
--返り値用の配列に値をセット
if temp_count < insert_pos then
--ループカウント < 引数2(insert_pos)の時、元の配列の値をセット return_array[temp_count] = a_array[temp_count]; end if; if temp_count = insert_pos then --ループカウント = 引数2(insert_pos)の時、引数3(挿入する文字列)をセット return_array[temp_count] = c_insert_char; end if; if temp_count > insert_pos then
--ループカウント > 引数2(insert_pos)の時、元の配列の値(配列の添え字は-1)をセット
return_array[temp_count] = a_array[temp_count -1] ;
end if;
if temp_count = array_length(a_array,1) then
--最後に元の配列の最後の値をセット
return_array[temp_count +1 ] = a_array[temp_count];
end if;
end loop;
return return_array;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION insert_into_array_num(numeric[], numeric, numeric)
OWNER TO postgres;
実行例
--配列[123,234,345,456,567]の3番目に999を入れる
select * from insert_into_array_num(array[123,234,345,456,567],3,999)
--{123,234,999,345,456,567}