postgresql: создание оператора умножения текста в целые числа - PullRequest
0 голосов
/ 21 ноября 2018

Я ищу для отладки запроса 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 без оператора, ошибки не существует.

1 Ответ

0 голосов
/ 21 ноября 2018

Несмотря на то, что это функция, аргумент для использования это procedure.

CREATE OPERATOR * (
     LEFTARG = text
    ,RIGHTARG = integer
    ,PROCEDURE = multiplytext2int
)
...