Проблема с использованием любого оператора в функции plpgsql - PullRequest
1 голос
/ 25 августа 2011

Когда я запускаю эту функцию:

CREATE OR REPLACE FUNCTION insert_styles(raw_styles text)
  RETURNS integer AS
$BODY$
declare
    arr_value TEXT[];
    upper_limit INTEGER;    
    style_ids INTEGER[];
    BEGIN
        arr_value   := string_to_array(raw_styles, ',');
        upper_limit := array_upper(arr_value, 1);

        RAISE NOTICE 'arr_value = %', arr_value;
        SELECT music_style FROM music_style INTO style_ids WHERE name = ANY (arr_value);
        RETURN upper;
    END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

с этим запросом:

SELECT insert_styles('Techno,ddd,wer,WJKDF');

Это дает мне следующую ошибку:

NOTICE:  arr_value = {Techno,ddd,wer,WJKDF}
ERROR:  array value must start with "{" or dimension information
CONTEXT:  PL/pgSQL function "insert_styles" line 10 at SQL statement

Я просто могуне понять это.Я новичок постгрес!

пока !!

1 Ответ

2 голосов
/ 25 августа 2011

Предполагая, что ваш столбец music_style имеет целочисленный тип данных, вам просто нужно добавить array_agg агрегат в ваш запрос:

SELECT array_agg(music_style)
FROM music_style
INTO style_ids -- style_ids is integer[]
WHERE name = ANY (arr_value);
...