@LevSvl08

Как правильно переопределить данную функцию в postgresql?

У меня есть запрос к базе данных oracle. Этот запрос содержит функцию decode, в коде это выглядит следующим образом:

decode(repair_2.class_tne, '-1', repair_2.all_prev, 0)

В postgresql такой функции, как decode нет, поэтому я переопределил эту функцию:

create or replace function decode(expression_1 varchar,search_1 anyelement,result_1 bigint,default_1 integer) 
returns varchar language sql as $$
	select
		case expression_1
			when search_1::varchar then result_1::varchar
			else default_1::varchar
 		end 
$$;

Но если делать такой запрос

decode(repair_2.class_tne, '-1', repair_2.all_prev, 0)

, то будет ошибка "could not determine polymorphic type because input has type unknown", и мне приходится приводить '-1' к varchar:

decode(repair_2.class_tne, '-1'::character varying, repair_2.all_prev, 0)

Но дело в том, что подобных запросов еще очень много, и мне не хочется для каждого вручную добавлять оператор присваивания, можно ли как-нибудь переопределить функцию так, чтобы этого делать не приходилось?
  • Вопрос задан
  • 182 просмотра
Решения вопроса 1
@alexalexes
1. Открываете функцию замены текста в тестовом редакторе.
2. Включаете режим использования регулярных выражений.
3. Используете регулярки:
- для поиска:
'([\-]*[\d]+)'
- для замены:
'$1'::character varying
4. Если текстовый редактор подсвечивает результат поиска в тексте, то убедиться, что захватывается именно то, что нужно.
5. Провести пошаговую замену текста (если не уверены в результате) или запустить полную замену.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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