2012-04-18 9 views
22

में पूर्णांक [] पर पूर्णांक Iterating मैं plpgsql फ़ंक्शन में एक पूर्णांक सरणी (integer[]) के माध्यम से लूप करने की कोशिश कर रहा हूं। कुछ इस तरह:पीएल/पीजीएसक्यूएल

declare 
    a integer[] = array[1,2,3]; 
    i bigint; 
begin 
    for i in a 
loop 
    raise notice "% ",i; 
end loop; 
return true; 
end 

मेरी वास्तविक उपयोग मामले में पूर्णांक सरणी a कार्य करने के लिए पैरामीटर के रूप में पारित कर दिया है। मुझे यह त्रुटि मिलती है:

ERROR: syntax error at or near "$1" 
LINE 1: $1 

सरणी के माध्यम से ठीक से लूप कैसे करें?

उत्तर

50
DECLARE 
    a integer[] := array[1,2,3]; 
    i integer;     -- int, not bigint! 
BEGIN 
FOR i IN 1 .. array_upper(a, 1) 
LOOP 
    RAISE NOTICE '%', a[i];  -- single quotes! 
END LOOP; 
RETURN TRUE; 
END 

या कोशिश new FOREACH in PostgreSQL 9.1:

FOREACH i IN ARRAY a 
LOOP 
    RAISE NOTICE '%', i; 
END LOOP; 

generate_series() या unnest() साथ हालांकि, सेट आधारित समाधान अक्सर बड़ा सेट के लिए पाशन की तुलना में तेजी है।

बुनियादी उदाहरण:

टैग या अधिक के लिए खोजें।

+0

अभी मैं फ़ंक्शन में सरणी को 'f (सरणी [1,2,3,4]) के रूप में पास कर रहा हूं, क्या किसी फ़ंक्शन में सरणी पास करने का कोई बेहतर तरीका है? –

+3

'एफ ('{1,2,3,4}' :: int [])' एक और * तरीका है। बेहतर? - आप तय करें! –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^