Witam, próbowałem na kilka różnych sposobów rozwiązać ten problem, jednak nie udało się… W czym rzecz, chcę wybrać z tabeli pojedynczą kolumnę, a następnie zwrócić ją jako pojedynczy łańcuch znaków.
CREATE OR REPLACE FUNCTION select_tags(id integer) RETURNS text AS $$
DECLARE
temp RECORD;
arr text[];
BEGIN
FOR temp IN SELECT t.tag_name FROM tag t JOIN news2tag n2t ON n2t.tag_id = t.tag_id WHERE n2t.news_id = id LOOP
arr[] = temp.tag_name;
END LOOP;
RETURN array_to_string(arr, ', ');
END;
$$ LANGUAGE 'plpgsql';
Nie powiem, żeby komunikat serwera był dla mnie zbyt zrozumiały:
airborn=> SELECT select_tags(2);
ERROR: syntax error at end of input at character 8
QUERY: SELECT
CONTEXT: PL/pgSQL function "select_tags" line 6 at assignment
LINE 1: SELECT
^
airborn=>
Samo zapytanie SELECT jest oczywiście dobrze skonstruowane i dla konkretnej wartości zwraca prawidłowe wyniki.W dniu 10.05.2008 , o godzinie 0:18 _został dopisany post przez Airborn_hmm, no dobra, okazało się, że nie można przypisać po prostu do kolejnej wartości poprzez arr[], trzeba dołożyć indeks w tablicy
CREATE OR REPLACE FUNCTION select_tags(id integer) RETURNS text AS $$
DECLARE
temp RECORD;
arr text[];
i int;
BEGIN
FOR temp IN SELECT t.tag_name FROM tag t JOIN news2tag n2t ON n2t.tag_id = t.tag_id WHERE n2t.news_id = id LOOP
arr[i] = temp.tag_name;
i = i + 1;
END LOOP;
RETURN array_to_string(arr, ', ');
END;
$$ LANGUAGE 'plpgsql';
wywołanie funkcji nie powoduje już błędu, ale zwraca pusty wynik…W dniu 10.05.2008 , o godzinie 0:20 _został dopisany post przez Airborn_echhhh, ten język nigdy nie przestanie mnie zaskakiwać… i int nie wystarcza, i int = 1; już w zupełności, nie wiem jaką wartość przyjmuje nowo definiowany int, ale na pewno nie taką jakiej się wcześniej spodziewałem
gdyby komuś się kiedyś mogło do czegoś przydać…
CREATE OR REPLACE FUNCTION select_tags(id integer) RETURNS text AS $$
DECLARE
temp RECORD;
arr text[];
i int = 1;
BEGIN
FOR temp IN SELECT t.tag_name FROM tag t JOIN news2tag n2t ON n2t.tag_id = t.tag_id WHERE n2t.news_id = id LOOP
arr[i] = temp.tag_name;
i = i + 1;
END LOOP;
RETURN array_to_string(arr, ', ');
END;
$$ LANGUAGE 'plpgsql';
