2014-05-15 48 views
1

我有這樣的代碼片段:如何在PostgreSql中克隆數組?

RAISE NOTICE 'p_new_roster: %', p_new_roster; --prints {3,4,5} 
FOREACH i IN ARRAY p_new_roster 
LOOP 
    RAISE NOTICE 'p_new_roster[i]: %', p_new_roster[i]; --prints 5,NULL,NULL (through 3 iterations) 
    v_new_users := v_new_users || p_new_roster[i]; 
END LOOP; 

爲什麼p_new_roster [1]爲5,p_new_roster [2]是NULL等?變量i被聲明爲整數,數組聲明爲integer []。

基本上我想要做的是克隆'p_new_roster'數組。如果有人知道更好的辦法,我想知道如何。

+1

PostgreSQL的陣列是不可變的數組元素的值。你爲什麼要「克隆」它?只是'v_new_users = p_new_roster'。你要做的這個實際問題是什麼,爲什麼你要問這裏的「怎麼樣」? –

+0

我有兩個數組: arr1 = {1,2,3}和arr2 = {3,4,5}(這只是示例)。 我需要函數比較這兩個數組,並返回一列{1,2}和第二{4,5}(我會把結果放在複合類型中)。 – anagarD

+0

如果我做了v_new_users:= p_new_roster,那麼我對v_new_users所做的更改也會在p_new_roster中看到?我需要p_new_roster供以後使用。 – anagarD

回答

1

如果你想採取空出數組做

v_new_users := v_new_users || array_remove(p_new_roster, null) 

未經環

或者只是追加

v_new_users := v_new_users || p_new_roster 

也沒有循環

或者您的腳本已修復

RAISE NOTICE 'p_new_roster: %', p_new_roster; --prints {3,4,5} 
FOREACH i IN ARRAY p_new_roster 
LOOP 
    RAISE NOTICE 'p_new_roster[i]: %', i; 
    v_new_users := v_new_users || i; 
END LOOP; 

i是在每次迭代不是數組索引

+0

我想我是索引 - .-謝謝你的回答,幫助了很多! – anagarD