2012-03-13 26 views
8

बनाते समय मुझे सिंटेक्स त्रुटि देता कोडArray_append का उपयोग कर यहाँ PostgreSQL समारोह

CREATE OR REPLACE FUNCTION primes (IN integer) RETURNS TEXT AS $$ 
DECLARE 
    counter INTEGER = $1; 
    primes int []; 
    mycount int; 
    BEGIN 
    WHILE counter != 0 LOOP 
     mycount := count(primes); 
     array_append(primes [counter], mycount); 
     counter := counter - 1; 
    END LOOP; 
    RETURN array_to_text(primes[], ','); 
    END; 
$$ 
LANGUAGE 'plpgsql' 

यह मैं एक प्रमुख पैदा समारोह की शुरुआत विकसित कर रहा है है। मैं इसे सरणी की 'गिनती' वापस करने के लिए बस इसे प्राप्त करने की कोशिश कर रहा हूं। तो अगर मैं समारोह में '7' पास करता हूं तो मुझे वापस [0, 1, 2, 3, 4, 5, 6] प्राप्त करना चाहिए।

लेकिन जब मैं इस समारोह बनाने की कोशिश मैं

SQL Error: ERROR: syntax error at or near "array_append" LINE 1: array_append($1 [ $2 ], $3) 
     ^QUERY: array_append($1 [ $2 ], $3) CONTEXT: SQL statement in PL/PgSQL function "primes" near line 8 

मिल रहा postgres कार्यों के साथ एक नौसिखिया हूँ। मुझे समझ में नहीं आ रहा है कि मैं इस सरणी को ठीक से काम करने के लिए क्यों नहीं मिल सकता।

फिर भी मैं चाहता हूं कि इस सरणी को सरणी की 'वर्तमान' गिनती के साथ सही ढंग से भरना है। (यह सिर्फ मुझे समझने में मदद करने के लिए और अधिक है कि वास्तव में यह लूप सही ढंग से कर रहा है और इसे सही तरीके से गिन रहा है)।

आपकी मदद के लिए धन्यवाद।

+0

प्राइम जेनरेट करने के लिए आप डेटाबेस का उपयोग क्यों कर रहे हैं?! –

+0

मुझे लगता है कि आप केवल पीएल/एसक्यूएल सीखने के लिए ऐसा कर रहे हैं - मुझे लगता है कि इस सवाल के लिए एसओ एक और उचित जगह होगी। – MikeyB

+0

हाँ मैं सीखने के लिए बस यह कर रहा हूं। – StanM

उत्तर

13
fine manual से

:

समारोह: array_append(anyarray, anyelement)
वापसी प्रकार: anyarray
विवरण: एक सरणी के अंत

तो array_append को एक तत्व संलग्न एक आरआर देता है रे और आपको उस वापसी मूल्य को किसी चीज़ को असाइन करने की आवश्यकता है। साथ ही, मुझे लगता है कि आप अपने काम के अंत में array_to_string चाहते हैं, array_to_text नहीं। और primes एक सरणी है ताकि आप में किसी प्रविष्टि में शामिल होने की कोशिश करने के बजाय array_append(primes, mycount) चाहते हैं।

CREATE OR REPLACE FUNCTION primes (IN integer) RETURNS TEXT AS $$ 
DECLARE 
    counter INTEGER = $1; 
    primes int []; 
    mycount int; 
BEGIN 
    WHILE counter != 0 LOOP 
     mycount := count(primes); 
     primes := array_append(primes, mycount); 
     counter := counter - 1; 
    END LOOP; 
    RETURN array_to_string(primes, ','); 
END; 
$$ LANGUAGE 'plpgsql'; 

मैं नहीं जानता कि क्या आप mycount := count(primes); का इरादा करने के लिए, शायद आप mycount := array_length(primes, 1); कहने के लिए इतना है कि आप primes में लगातार पूर्णांकों का एक अनुक्रम मिलेगा मतलब है।

+0

बहुत बढ़िया। धन्यवाद कि मेरी समस्या थी। और हाँ मैं array_length की तलाश में था - मैं एसक्यूएल प्रोग्रामिंग सिंटैक्स सीखने की कोशिश कर रहा हूं। यह एक पूरी नई दुनिया है। – StanM

+0

@StanQA: आप अनुक्रमों के उत्पादन के लिए ['gener_series'] (http://www.postgresql.org/docs/current/static/functions-srf.html#FUNCTIONS-SRF-SERIES) पर एक नज़र डालना चाहते हैं। आपको लूप के बजाय सेट/टेबल के संदर्भ में सोचना होगा, लेकिन इस तरह आपको SQL को किसी भी तरह से संपर्क करना होगा। –

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