@romaro

Как написать функцию для парсинга json на PLpgSQL?

Хочу написать функцию, которая принимает два параметра: объект jsonb и ключ, который нужно из него извлечь. Для теста написал такую реализацию, но не понятно, почему l_result возвращает null:
DO
$$
DECLARE
	l_json jsonb := '{"entityId":12}'::jsonb;
	l_key TEXT := 'entityId'; 
	l_cmd TEXT := 'SELECT ($1 ->> $2)::int;';
	l_result int;
BEGIN
	RAISE NOTICE 'CMD -> %', l_cmd;
	EXECUTE l_cmd INTO l_result USING l_json, quote_literal(l_key);

	RAISE NOTICE 'JSON -> %', l_result;
END;
$$


То есть я конечно могу спарсить в самой функции:
BEGIN
		l_pascal_name := (p_obj ->> 'pascalName');
		l_public_name := (p_obj ->> 'publicName');
		l_is_doc := (p_obj ->> 'isDocument')::boolean;
		
		EXCEPTION WHEN OTHERS THEN
			RAISE EXCEPTION 'Parsing error: %', SQLERRM;
	END;


Но мне нужны подробные ошибки в случае неудачи. Поэтому хочу вызывать что-то вроде:
BEGIN
    l_public_name := parse_text_required(p_json, 'entityId');
	END;


И проблема в том, что я не понимаю, как внутри parse_text_required сгенерировать код, который извлекал бы entityId из p_json
  • Вопрос задан
  • 81 просмотр
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
raise notice '%', l_json->>l_key;
всё
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы