Задать вопрос
@Exzyggwp

Select in JSON Object?

Всем привет, помогите кто знает..

Есть функция PL\SQL на подобии этого
FUNCTION myfunc(p_id varchar2) return in number
BEGIN

    SELECT t_id, t_name, t_phone FROM clients where t_id = p_id;

    SELECT t_id, t_name, t_phone FROM trainers where t_id < p_id;       

    RETURN;

END myfunc;


Первый Select возвращает только одну строку данных, а второй Select несколько строк данных.

Нужно сделать так чтобы данные первого select записывались как объект JSON,
А данные второго select записывались как массив JSON который принадлежит к объекту.

Примерно так,
Json_obj(Value1, Value2, json_arr);

Всё эту нужно для того чтобы возвращать эти данные при вызове. (return)
А функция может возвращать только одно значение, из за этого важно что json_arr был как один из элементов json_obj.
  • Вопрос задан
  • 380 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Ниже вариант запроса (PostgreSQL) который собирает всё в один JSON:
SELECT row_to_json(client.*)
FROM (
  SELECT 
	clients.*,
	json_agg(
	  row_to_json(trainers.*)
	) trainers
  FROM 
	clients 
  JOIN trainers ON trainers.t_id < clients.t_id
  where 
	clients.t_id = 10
  GROUP BY clients.t_id, clients.t_name, clients.t_phone
) client;


SQL fiddle

Вариант PL\SQL:
SELECT json_object(
      't_id' VALUE client.t_id,
      't_name' VALUE client.t_name,
      't_phone' VALUE client.t_phone,
      't_trainers' VALUE client.trainers
  ) FROM (
  SELECT 
  clients.*,
  json_arrayagg(json_object(
      't_id' VALUE trainers.t_id,
      't_name' VALUE trainers.t_name,
      't_phone' VALUE trainers.t_phone
  )) trainers
  FROM 
	clients 
  JOIN trainers ON trainers.t_id < clients.t_id
  where 
	clients.t_id = 10
  GROUP BY clients.t_id, clients.t_name, clients.t_phone
  ) client;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Exzyggwp Автор вопроса
Это вообще возможно?
Или есть другие способы?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Goodt Екатеринбург
от 150 000 до 200 000 ₽
Data World Москва
от 180 000 до 210 000 ₽
Selecty Москва
До 350 000 ₽