Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 plpgsql json_object  [new]
Alex_Wong
Member

Откуда:
Сообщений: 164
Не получается внести переменные str1 и str2 вот так:
RETURN json_object(str1, str2);
+

--DROP FUNCTION public.msg_();
CREATE OR REPLACE FUNCTION public.msg()
RETURNS text
LANGUAGE 'plpgsql'
COST 100
VOLATILE
AS $BODY$
DECLARE
arr1 int []; arr2 varchar []; str1 text; str2 text;
BEGIN
arr1 := array_append(arr1, 1);
arr1 := array_append(arr1, 2);
arr1 := array_append(arr1, 3);
str1 := array_to_string(arr1, ',');
str1 := '{' || str1 || '}';
-- RETURN str1;                       -- {1,2,3}
arr2 := array_append(arr2, 'abc');
arr2 := array_append(arr2, 'sql');
arr2 := array_append(arr2, 'xyz');
str2 := array_to_string(arr2, ',');
str2 := '{' || str2 || '}';
-- RETURN str2;                       -- {abc,sql,xyz}

-- Так не работает:
-- RETURN json_object(str1, str2);

-- Так работает: {"1" : "abc", "2" : "sql", "3" : "xyz"}
 RETURN json_object('{1,2,3}','{abc,sql,xyz}'); 
END;
$BODY$;


Подскажите, пожалуйста, как правильно делать.
20 июл 20, 20:26    [22170681]     Ответить | Цитировать Сообщить модератору
 Re: plpgsql json_object  [new]
fte
Member

Откуда: Moscow
Сообщений: 375
Alex_Wong,
Ну а само сообщение об ошибке где????
Как минимум у Вас
Определение функции: RETURNS text
Результат: RETURN json_object('{1,2,3}','{abc,sql,xyz}');
20 июл 20, 21:03    [22170704]     Ответить | Цитировать Сообщить модератору
 Re: plpgsql json_object  [new]
Alex_Wong
Member

Откуда:
Сообщений: 164
fte, сообщение об ошибке:
+

ERROR: function json_object(text, text) does not exist
LINE 1: SELECT json_object(str1, str2)
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
QUERY: SELECT json_object(str1, str2)

20 июл 20, 21:10    [22170706]     Ответить | Цитировать Сообщить модератору
 Re: plpgsql json_object  [new]
Melkij
Member

Откуда: Санкт-Петербург
Сообщений: 1111
Alex_Wong
ERROR: function json_object(text, text) does not exist

Ну как бы да, почему вы решили что она такая существует?
\df json_object
Список функций
Схема | Имя | Тип данных результата | Типы данных аргументов | Тип
------------+-------------+-----------------------+------------------------+-------
pg_catalog | json_object | json | text[] | функ.
pg_catalog | json_object | json | text[], text[] | функ.

Зачем вы массивы к строкам приводите? Передайте сразу массивы, если в них у вас соответственно ключи и значения для json объекта.
20 июл 20, 22:05    [22170733]     Ответить | Цитировать Сообщить модератору
 Re: plpgsql json_object  [new]
Alex_Wong
Member

Откуда:
Сообщений: 164
Melkij,
автор
Зачем вы массивы к строкам приводите?

по не знанию .. думал, что если так работает:
+

DECLARE
arr1 [b]varchar[/b] []; arr2 varchar [];
BEGIN
arr1 := array_append(arr1, [b]'1'[/b]);
arr1 := array_append(arr1, [b]'2[/b]');
arr1 := array_append(arr1, [b]'3'[/b]);
--
arr2 := array_append(arr2, 'abc');
arr2 := array_append(arr2, 'sql');
arr2 := array_append(arr2, 'xyz');
--
 RETURN json_object(arr1, arr2);
END;


но у меня arr1 - массив чисел, они генерятся от условий ..,
а с ними не работает, как привел исходно в вопросе и error
пишет о необходимости приведения типов

Сделал так:
arr1 := array_append(arr1, 1::varchar);
arr1 := array_append(arr1, 2::varchar);
arr1 := array_append(arr1, 3::varchar);
работает, спасибо.
21 июл 20, 10:21    [22170856]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить