Я пытаюсь отладить запрос Microsoft SQL внутри Posgresql (короче говоря, я предпочитаю сообщения об ошибках, которые он возвращает), когда я наткнулся на некоторый SQL, который умножал выбор подстроки на целое число, теперь я, очевидно, мог бы использовать каждую часть, используя ::integer
однако есть много подстрок, которые требуют приведения, и много запросов, которые я хотел выполнить, поэтому я решил, что могу упростить свою жизнь, используя оператор для решения этой проблемы с помощью следующей функции.
CREATE OR REPLACE FUNCTION public.multiplytext2int(text,integer)
RETURNS integer AS
$$
SELECT CASE
WHEN $1 ~ '^[0-9]+$'
THEN $1::integer * $2
ELSE 0::integer
END
$$
LANGUAGE sql IMMUTABLE;
очевидно, что логика не совсем герметична, но ее будет достаточно для запросов, которые я буду выполнять, поэтому я пытаюсь создать оператор
CREATE OPERATOR * (
LEFTARG = text
,RIGHTARG = integer
,FUNCTION = multiplytext2int
)
когда я запускаю это, я получаю следующую ошибку
ВНИМАНИЕ: атрибут оператора "функция" не распознан ОШИБКА: необходимо указать процедуру оператора
********** Ошибка **********
ОШИБКА: необходимо указать процедуру оператора Состояние SQL: 42P13
что я здесь делаю не так?
в конечном итоге я хочу иметь возможность набирать SELECT '1'::text * 2::integer
без ошибки оператора не существует.