2016-03-09 4 views
0

есть таблица «json_test» и вставил следующую запись:Postgres JSON Обработка массивов данных

create table json_test (v json); 

insert into json_test values ('{"facilityId": ["20","30","40","50","51"]}') 

SELECT trim(json_array_elements_text(v->'facilityId')) from json_test 

Приведенные выше списки выберите объект ID в виде отдельных строк.

Мне нужны те же строки в функции Postgres, чтобы вставить запись в другую таблицу. Я написал следующий код для возврата i. Выходной сигнал v_status при проверке равен (20,,,,,,,,,,,,). Мне нужно получить только 20, но я не могу это получить.

for i in SELECT json_array_elements_text(v->'facilityId') from json_test 

loop 

v_status:= i; 

end loop; 

ответ

1

Вы не указали полное определение функции в своем вопросе. Если у вас есть DDL:

CREATE TABLE json_test(
    id SERIAL PRIMARY KEY, 
    v JSON 
); 

INSERT INTO json_test(v) VALUES 
    ('{"facilityId": ["20","30","40","50","51"]}'::JSON); 

Вы можете проверить полный PL/pgSQL guide в качестве ссылки, но ваша функция может быть определена как следующие:

CREATE OR REPLACE FUNCTION get_facility_ids(rid INTEGER) 
    RETURNS SETOF INTEGER AS $$ 
DECLARE 
    t TEXT; 
BEGIN 
    FOR t IN SELECT json_array_elements_text(v->'facilityId') 
    FROM json_test WHERE id = rid 
    LOOP 
    RETURN NEXT t; 
    END LOOP; 
END; 
$$ LANGUAGE plpgsql; 

SELECT get_facility_ids(1) AS facultyId; 

Просто для информации, вы можете INSERT записей от SELECT заявлений. Проверьте documentation.

+0

спасибо. Я думаю, что я объявил t как rowtype вместо TEXT. –

Смежные вопросы