Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / plpgsql json_object / 5 сообщений из 5, страница 1 из 1
20.07.2020, 20:26
    #39982012
Alex_Wong
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
plpgsql json_object
Не получается внести переменные str1 и str2 вот так:
RETURN json_object(str1, str2);

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
--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$;



Подскажите, пожалуйста, как правильно делать.
...
Рейтинг: 0 / 0
20.07.2020, 21:03
    #39982028
fte
fte
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
plpgsql json_object
Alex_Wong,
Ну а само сообщение об ошибке где????
Как минимум у Вас
Определение функции: RETURNS text
Результат: RETURN json_object ('{1,2,3}','{abc,sql,xyz}');
...
Рейтинг: 0 / 0
20.07.2020, 21:10
    #39982030
Alex_Wong
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
plpgsql json_object
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)

...
Рейтинг: 0 / 0
20.07.2020, 22:05
    #39982043
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
plpgsql json_object
Alex_Wong
ERROR: function json_object(text, text) does not exist

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

Зачем вы массивы к строкам приводите? Передайте сразу массивы, если в них у вас соответственно ключи и значения для json объекта.
...
Рейтинг: 0 / 0
21.07.2020, 10:21
    #39982137
Alex_Wong
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
plpgsql json_object
Melkij,
автор Зачем вы массивы к строкам приводите?

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

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
DECLARE
arr1 varchar []; arr2 varchar [];
BEGIN
arr1 := array_append(arr1, '1');
arr1 := array_append(arr1, '2');
arr1 := array_append(arr1, '3');
--
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);
работает, спасибо.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / plpgsql json_object / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]